@cratis/pi 7.22.0 → 7.24.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/skills/cratis-application-slice-conformance/SKILL.md +1 -1
- package/package/corpus/skills/cratis-application-slice-conformance/references/contract-and-precedence.md +5 -5
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +13 -4
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +3 -3
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/cases-to-specify.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/integration-contracts.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +5 -3
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translation-patterns.md +1 -1
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +4 -3
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +37 -36
- package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +154 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +48 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +1 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/verification.json +6 -0
- package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +16 -8
- package/package/corpus/skills/cratis-screenplay-discovery/references/event-naming.md +1 -1
- package/package/corpus/skills/cratis-screenplay-discovery/references/facilitation.md +5 -4
- package/package/corpus/skills/cratis-screenplay-discovery/references/human-workshop.md +1 -1
- package/package/corpus/skills/cratis-screenplay-discovery/references/interview-questions.md +2 -2
- package/package/corpus/skills/cratis-screenplay-discovery/references/personas-and-causes.md +7 -4
- package/package/corpus/skills/cratis-screenplay-discovery/references/plotting-and-handoff.md +8 -7
- package/package/corpus/skills/cratis-screenplay-discovery/references/storming-loop.md +2 -2
- package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +13 -3
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/naming-primitives.md +5 -3
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +1 -2
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +3 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +11 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/loss-report-template.md +1 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md +4 -4
- 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 +10 -6
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +33 -6
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +28 -6
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +108 -9
- package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +23 -7
- package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +11 -10
- package/package/corpus/skills/cratis-screenplay-model-review/references/report-template.md +5 -1
- package/package/corpus/skills/cratis-screenplay-model-review/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +5 -5
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/completeness-self-check.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/opt-in.md +7 -5
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/phases.md +4 -4
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/provenance.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/reasoning-notes.md +24 -19
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/stop-or-assume.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/verdicts-and-modes.md +5 -3
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/worked-example.md +15 -9
- package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +11 -1
- package/package/corpus/skills/cratis-screenplay-read-surface/references/guarded-actions.md +4 -0
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +7 -6
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/drift-and-ledger.md +1 -1
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +3 -3
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +1 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +25 -9
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/coverage-matrix.md +1 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +5 -0
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-catalogue.md +7 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md +1 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-workshop.md +1 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +1 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +22 -8
- package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +6 -4
- package/package/corpus/skills/cratis-screenplay-slice-design/references/field-lineage.md +2 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/references/model-reasoning.md +87 -0
- package/package/corpus/skills/cratis-screenplay-slice-design/references/provenance.md +1 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/read-model-design.md +2 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/references/review-questions.md +2 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +12 -11
- package/package/corpus/skills/cratis-screenplay-slice-design/references/slicing.md +3 -3
- package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +9 -3
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +23 -6
- package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +67 -1
- package/package/corpus/skills/cratis-screenplay-specifications/references/persona-callers-and-cases.md +117 -0
- package/package/corpus/skills/cratis-screenplay-specifications/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +32 -17
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +3 -3
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/chronicle-boundaries.md +11 -6
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +24 -11
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/evolution.md +2 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +9 -0
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +3 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +12 -5
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +12 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +124 -5
- package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +8 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +19 -4
- package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +7 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +22 -4
- package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +21 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +22 -5
- package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +7 -6
- package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +20 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +6 -0
- package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +4 -2
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/guarded-interactions.md +71 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +7 -4
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +17 -6
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +1 -1
- package/package.json +1 -1
|
@@ -54,7 +54,7 @@ Statements here were checked at those tags:
|
|
|
54
54
|
| `<Type>[]`, shapes must be declared; `@pii` and `reason` on concepts | `v4.66.0:Documentation/screenplay/events.md`, `concepts.md` |
|
|
55
55
|
| `then denied`, `given caller`, `then error` | `v4.66.0:Documentation/screenplay/specifications.md` |
|
|
56
56
|
| PII on an event-source id is rejected by Chronicle (CHR0034); nullable event properties warn (CHR0012) | Chronicle `v19.32.0:Source/Clients/DotNET.CodeAnalysis/DiagnosticIds.cs` |
|
|
57
|
-
| Any `@pii` or `@sensitive` on a concept fails binding (PLAY0268) | `v4.66.0:Source/DotNET/Screenplay/Semantics/SemanticModelBinder.Concepts.cs:21-24` |
|
|
57
|
+
| Any `@pii` or `@sensitive` on a concept fails binding (PLAY0268) at 4.66.0; current markers are in `cratis-screenplay-command-surface` | `v4.66.0:Source/DotNET/Screenplay/Semantics/SemanticModelBinder.Concepts.cs:21-24` |
|
|
58
58
|
|
|
59
59
|
Every complete `screenplay` fence in this skill compiles with the standalone compiler
|
|
60
60
|
4.68.0 (`--warnaserror`) and with `cratis screenplay validate --warnings-as-errors` 3.28.2.
|
|
@@ -88,7 +88,8 @@ to reach the intended result." With a brief, restate domain and goal in two sent
|
|
|
88
88
|
|
|
89
89
|
**Unattended: assume visibly.** Never stop to ask. Take the most reasonable assumption,
|
|
90
90
|
record it with its reason in the session STATE.md (`.ai-work/screenplay/<model-slug>/STATE.md`,
|
|
91
|
-
untracked) and, when it shapes the model, in the feature `
|
|
91
|
+
untracked) and, when it shapes the model, in the feature's fenced `documentation` (a short
|
|
92
|
+
**ASSUMED** marker may stay in its `description`). Keep what the user
|
|
92
93
|
decided apart from what you assumed. Never guess silently.
|
|
93
94
|
|
|
94
95
|
## Procedure
|
|
@@ -111,7 +112,7 @@ decided apart from what you assumed. Never guess silently.
|
|
|
111
112
|
a set-aside, an open question, or "does not apply, because ...". Unattended: model a lens
|
|
112
113
|
fact only when the input implies it; otherwise record an open question.
|
|
113
114
|
5. **Plot: order and branch** (`references/plotting-and-handoff.md`). Walk from the first
|
|
114
|
-
trigger to every end. In each event's slice `
|
|
115
|
+
trigger to every end. In each event's slice `documentation` record what it comes **after**,
|
|
115
116
|
what **causes** it (persona, schedule, outside party, other fact) and what it is **only
|
|
116
117
|
allowed under** (intent). At every event ask what can happen next *instead*, including
|
|
117
118
|
nothing, and which next steps may happen in any order. Classify forks: *outcome branch* (one
|
|
@@ -123,8 +124,15 @@ decided apart from what you assumed. Never guess silently.
|
|
|
123
124
|
two business facts that make it meaningful. A simple state transition may carry no payload
|
|
124
125
|
beyond its identity: do not pad events with fields just to reach a count. Domain names; `<Type>[]` for collections (declare the `type`); a
|
|
125
126
|
`concept` for a value with its own meaning; classify personal data on the concept with
|
|
126
|
-
|
|
127
|
-
|
|
127
|
+
bare `pii` and a reason now; operational secrets use `secret` (4.127.0).
|
|
128
|
+
Either blocks binding (PLAY0268); record the gap, never drop protection.
|
|
129
|
+
Ask what use, lawful basis, retention, recipient/transfer and erasure needs the
|
|
130
|
+
data serves; declare those in a `purpose`, not a concept reason. Special/criminal
|
|
131
|
+
qualifiers describe the value, not legal permission. See command-surface
|
|
132
|
+
`references/compliance.md` for purpose coverage checks and the processing record.
|
|
133
|
+
For who-is-calling details, distinguish token claims from a keyed single-result
|
|
134
|
+
identity-source query or opaque implementation. The `identity` block is metadata;
|
|
135
|
+
executable detail reads remain unsupported. See `references/context.md` in command-surface.
|
|
128
136
|
7. **Validate, gate, hand off.** After a coherent batch of edits (not every sentence) run V1
|
|
129
137
|
with the tool and version named (`cratis-screenplay-toolchain`). Stop storming a workflow
|
|
130
138
|
when the user says it is complete or both closing questions return nothing new; unattended,
|
|
@@ -144,7 +152,7 @@ decided apart from what you assumed. Never guess silently.
|
|
|
144
152
|
matches alphabetically. Unimported folder files remain visible after ranked siblings.
|
|
145
153
|
MCP `expand-layout` preserves this order with import barrels; an import-less
|
|
146
154
|
`PlayFileWriter.Expand` layout falls back to path order. Order is presentation, not
|
|
147
|
-
execution or identity. Keep causes and branches in the feature `
|
|
155
|
+
execution or identity. Keep causes and branches in the feature `documentation` and STATE.md.
|
|
148
156
|
- A misspelt keyword inside a slice is only warning PLAY0029 and the block disappears: always
|
|
149
157
|
validate with warnings as errors.
|
|
150
158
|
|
|
@@ -152,7 +160,7 @@ decided apart from what you assumed. Never guess silently.
|
|
|
152
160
|
- An event is a fact the business wants to remember: past tense, business verb, two to four
|
|
153
161
|
words, specific (`BerthAssigned`, not `BerthUpdated`). No generic edit events.
|
|
154
162
|
- One business decision usually yields one event; several facts recognised separately may
|
|
155
|
-
yield several, with the reason in
|
|
163
|
+
yield several, with the reason in slice `documentation`.
|
|
156
164
|
- Calculated values are views, not events, unless the calculation is itself a decision the
|
|
157
165
|
business must be able to show later (a quoted price, a fee set for the season).
|
|
158
166
|
- Personas are roles with a purpose. A read-only persona is legitimate; a role that neither
|
|
@@ -162,7 +170,7 @@ decided apart from what you assumed. Never guess silently.
|
|
|
162
170
|
- A hand-over from an outside party is named as the fact we learn from it
|
|
163
171
|
(`MooringPermitGranted`). If most of a story is the outside party's steps, model only what
|
|
164
172
|
crosses to us.
|
|
165
|
-
- A rule that depends on stored state
|
|
173
|
+
- A rule that depends on stored state is recorded in `documentation` on the slice it constrains
|
|
166
174
|
(`only if ...`), marked as stated intent not enforced in the model today, with its target
|
|
167
175
|
enforcement named for `cratis-screenplay-streams-and-consistency` and
|
|
168
176
|
`cratis-screenplay-slice-design`. Never state copies, attestation booleans or rules living
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
- Optional event properties: the default is none. Chronicle warns on nullable event
|
|
57
57
|
properties (CHR0012) and a specification cannot state `null` for an event value (PLAY0350).
|
|
58
58
|
Make the value required, or record the second situation as its own event. Keep `optional`
|
|
59
|
-
only for a detail the business genuinely may not have, with the reason in
|
|
59
|
+
only for a detail the business genuinely may not have, with the reason in event `documentation`.
|
|
60
60
|
- Does the event restate the creation event's fields (a generic edit in disguise)? Ask which
|
|
61
61
|
business change it records; if none, name the specific correction or drop it.
|
|
62
62
|
- Never put personal data in the event-source id; one data subject per event.
|
|
@@ -38,7 +38,7 @@ that decision. If not, note the need as a view and move on.
|
|
|
38
38
|
## Unattended runs
|
|
39
39
|
|
|
40
40
|
- Never block on a question. Take the most reasonable assumption, record it in STATE.md with
|
|
41
|
-
why, and
|
|
41
|
+
why, and record it in feature `documentation` when it shapes the model.
|
|
42
42
|
- Prefer assumptions that keep the model honest (fewer, clearly named facts) over ones that
|
|
43
43
|
invent detail.
|
|
44
44
|
|
|
@@ -52,6 +52,7 @@ See "Evidence and privacy" in SKILL.md.
|
|
|
52
52
|
4. List assumptions taken.
|
|
53
53
|
5. Per workflow give the happy path, the decision points and the terminal facts in a few lines.
|
|
54
54
|
6. Propose the next step: the next workflow, or `cratis-screenplay-slice-design` for this one.
|
|
55
|
-
7. Update STATE.md (phase, status, carry-forward); keep durable rationale in
|
|
56
|
-
`
|
|
57
|
-
|
|
55
|
+
7. Update STATE.md (phase, status, carry-forward); keep durable rationale in fenced Markdown
|
|
56
|
+
`documentation`, summaries in `description`. At 4.127.0 canonical printing retains
|
|
57
|
+
documentation on its owner; MCP exposes it, but it changes no `modelRevision` and
|
|
58
|
+
reaches no rendered code. Inspect dropped comments after canonicalizing edits.
|
|
@@ -142,7 +142,7 @@ lists non-human causes (schedules, outside parties) separately.
|
|
|
142
142
|
- Ask everywhere: "What happens next instead, including nothing?"
|
|
143
143
|
|
|
144
144
|
Do not get stuck on exact timing; the point is the logical flow. The agent keeps the feature
|
|
145
|
-
`
|
|
145
|
+
`documentation` story line and after / caused by / only if in the slices current
|
|
146
146
|
(`plotting-and-handoff.md`).
|
|
147
147
|
|
|
148
148
|
### 6. Sweep and close (15 to 20 minutes)
|
|
@@ -21,14 +21,14 @@ assumption you take instead of asking.
|
|
|
21
21
|
| Outside | Which outside parties or systems send or receive information here? | Later translations and contracts | they send facts we rely on: ask how we recognise which of our records it concerns |
|
|
22
22
|
| Corrections | Can a recorded fact turn out wrong? How is it put right today? | Correction and reversal events instead of edits | "we just edit it": ask who needs to know it was changed |
|
|
23
23
|
| History | What would an auditor, a regulator or an angry customer ask to see later? | Finds facts that look like detail but must be kept | a calculation must be shown later: treat it as a fact |
|
|
24
|
-
| People's data | Which values identify or describe a person?
|
|
24
|
+
| People's data | Which values identify or describe a person? For what use, basis, retention, recipients/transfers and erasure exceptions? | bare `pii` on concepts; purpose declarations separate from reasons | special/criminal data needs declared safeguards; two people in one fact may need separate facts |
|
|
25
25
|
| Volume | How often does this happen, and how long does one instance live? | Informs stream design later; never a reason to drop a fact | an instance lives for years: note it for stream review |
|
|
26
26
|
| Input | What do we have to go on: written rules, a rough list, word of mouth, a running system? | Sets how hard to sweep | only word of mouth: run every sweep lens |
|
|
27
27
|
| Who decides | Who has the final word on what this means for the business? | Separates decisions from assumptions | no one present: mark meaning as assumption to confirm |
|
|
28
28
|
| Hotspots | Where does this go wrong, get disputed or need workarounds today? | Focuses depth | per hotspot: what happened the last time? |
|
|
29
29
|
| Competition | Can two parties want the same thing at the same moment? | Uniqueness rules, competing claims | yes: who wins, and what does the other see? |
|
|
30
30
|
| On behalf | Does anyone do this for someone else, or override it? | Authority and denial | yes: may they, and must we record who acted? |
|
|
31
|
-
| In any order | After this, which next steps must wait for each other and which need not? | Ordering, later automations | they need not: say so in the feature
|
|
31
|
+
| In any order | After this, which next steps must wait for each other and which need not? | Ordering, later automations | they need not: say so in the feature `documentation` |
|
|
32
32
|
| Instead | At this point, what else could happen instead, including nothing? | Branches and endings | "nothing": does it expire or wait forever? |
|
|
33
33
|
|
|
34
34
|
## Interview flow
|
|
@@ -61,8 +61,8 @@ into exactly one of these:
|
|
|
61
61
|
|
|
62
62
|
1. **Executable.** An `authorize` gate with a role, claim or authenticated policy the persona
|
|
63
63
|
does not satisfy, or an ownership policy (`claim "x" matches subject|<command property>`),
|
|
64
|
-
plus a `then denied` specification
|
|
65
|
-
|
|
64
|
+
plus a `then denied` specification using `given caller as <Persona>` for a
|
|
65
|
+
synthesized witness, or an explicit effective-gate caller (`cratis-screenplay-scenario-coverage`). Every command and query
|
|
66
66
|
under an inherited module or feature `authorize` gets its own denial spec. Ownership
|
|
67
67
|
against a Uuid-backed identifier is not renderable today (STAGE-ESM-015): note it.
|
|
68
68
|
2. **Gap or target requirement.** The check depends on stored state ("only the requester may
|
|
@@ -74,8 +74,11 @@ into exactly one of these:
|
|
|
74
74
|
Anything not yet resolved is an open question. Do not write Cannot lines for rules that bind
|
|
75
75
|
everyone (business rules, not authority).
|
|
76
76
|
|
|
77
|
-
A spec
|
|
78
|
-
|
|
77
|
+
A passing spec proves the gate refuses that caller, not every caller fitting a
|
|
78
|
+
persona. `given caller as <Persona>` chooses one authenticated policy witness;
|
|
79
|
+
inspect its `or` choice. Use explicit fixtures for anonymous callers, ownership
|
|
80
|
+
claims, missing gate conjuncts or refused synthesis. Name which witness stands
|
|
81
|
+
for which persona.
|
|
79
82
|
|
|
80
83
|
## Cannot resolved to an executable gate
|
|
81
84
|
|
package/package/corpus/skills/cratis-screenplay-discovery/references/plotting-and-handoff.md
CHANGED
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
|
|
14
14
|
Plotting arranges the discovered events as a narrative: what happens first, what depends on
|
|
15
15
|
what, what can happen instead, where it ends. In Screenplay the plot is written into the
|
|
16
|
-
model (
|
|
17
|
-
order is
|
|
16
|
+
model (fenced `documentation` on slices and features) and into STATE.md. Board order is the
|
|
17
|
+
authored declaration and import order; it is presentation, not causation, so write causes and
|
|
18
|
+
dependencies down.
|
|
18
19
|
|
|
19
20
|
## 1. Sequence
|
|
20
21
|
|
|
@@ -23,7 +24,7 @@ what came before it, what made it happen, what is it only allowed under?
|
|
|
23
24
|
|
|
24
25
|
## 2. Record after / caused by / only if
|
|
25
26
|
|
|
26
|
-
Write these three into the `
|
|
27
|
+
Write these three into the `documentation` of the `StateChange` slice that produces the event:
|
|
27
28
|
|
|
28
29
|
```text
|
|
29
30
|
After: BerthRequested
|
|
@@ -48,7 +49,7 @@ At every event, not only at forks someone mentions:
|
|
|
48
49
|
|
|
49
50
|
- What can happen next *instead*, including nothing? Does "nothing" expire, or wait forever?
|
|
50
51
|
- Which next steps may happen in any order, and which must wait for each other? Unordered
|
|
51
|
-
successors become automations or ordering specs later; say so in the feature
|
|
52
|
+
successors become automations or ordering specs later; say so in the feature `documentation`.
|
|
52
53
|
- On failure or refusal, what compensates, and is the refusal itself a fact the business must
|
|
53
54
|
remember (a decision) or just a rejection (a scenario later)?
|
|
54
55
|
|
|
@@ -62,7 +63,7 @@ thing from the views that listed it).
|
|
|
62
63
|
|
|
63
64
|
## 4. Plot output format
|
|
64
65
|
|
|
65
|
-
Put a compact story line in the feature `
|
|
66
|
+
Put a compact story line in the feature `documentation` and report the plot per workflow:
|
|
66
67
|
|
|
67
68
|
```text
|
|
68
69
|
The plot: SeasonalBerths
|
|
@@ -92,7 +93,7 @@ Switch only at a genuine handoff (a boat owner requests a berth, then the Harbou
|
|
|
92
93
|
act on it) or as a deliberate cutaway to show what another persona sees. A change to another
|
|
93
94
|
persona's read model is not automatically a new beat; it earns one only when that persona
|
|
94
95
|
would look at it as the next step. Do not alternate personas for symmetry. Carry each real
|
|
95
|
-
handoff into the feature `
|
|
96
|
+
handoff into the feature `documentation` and the slice-design handoff packet; a cutaway is
|
|
96
97
|
marked as such there.
|
|
97
98
|
|
|
98
99
|
```text
|
|
@@ -105,7 +106,7 @@ Alternating: Harbourmaster, BoatOwner, Harbourmaster, BoatOwner with no handoff
|
|
|
105
106
|
When the story is about a *view* rather than a stream (a waiting list, a work queue, a berth
|
|
106
107
|
board), a set of isolated before/after pairs hides what the user cares about: the same read
|
|
107
108
|
model changing over time. Note it as one narrated walkthrough in STATE.md and the feature
|
|
108
|
-
`
|
|
109
|
+
`documentation`: empty, then an item added, then the item done or failed, then removed, naming
|
|
109
110
|
the event that causes each step. It is a seed only; discovery writes no specification.
|
|
110
111
|
`cratis-screenplay-scenario-coverage` turns it into cumulative lifecycle specifications on
|
|
111
112
|
the read model, and `cratis-screenplay-automations-and-translations` owns the work-queue
|
|
@@ -29,7 +29,7 @@ then reports what changed and asks one question. The user should always be able
|
|
|
29
29
|
| rename | better business name for an existing fact | identity-affecting once persisted: see SKILL.md |
|
|
30
30
|
| split | one name was covering two facts | keep the original if it is persisted; add the second |
|
|
31
31
|
| merge | two names for one fact | only when they truly mean the same thing |
|
|
32
|
-
| reorder | the story order changed | change declaration/import order for the board; update the feature `
|
|
32
|
+
| reorder | the story order changed | change declaration/import order for the board; update the feature `documentation`/STATE.md for causes and branches |
|
|
33
33
|
| drop | not a fact after all | record why in STATE.md |
|
|
34
34
|
| none | already modeled | say so briefly |
|
|
35
35
|
|
|
@@ -68,7 +68,7 @@ What a model looks like after the first workflow has been stormed: no commands,
|
|
|
68
68
|
or screens yet. Slices are named after the command expected to produce each event. At
|
|
69
69
|
Screenplay 4.125.0, boards use authored declaration/import order, and MCP `expand-layout`
|
|
70
70
|
preserves it with imports. An import-less `PlayFileWriter.Expand` layout still falls back to
|
|
71
|
-
path order. Order is presentation only; the feature `
|
|
71
|
+
path order. Order is presentation only; the feature `documentation` records causes and branches.
|
|
72
72
|
Persona `description` text holds Does / Reads / Cannot on one quoted line here; the multi-line fenced
|
|
73
73
|
form is in `personas-and-causes.md`.
|
|
74
74
|
|
|
@@ -53,7 +53,7 @@ Framework repositories and brownfield work that has not opted in stay code-first
|
|
|
53
53
|
handlers, adapters, and scope Stage cannot render yet (the model stays the contract).
|
|
54
54
|
- **Never:** use code as a shortcut around the model; change the model to match
|
|
55
55
|
existing code; edit Stage-managed output; leave a modeled rule living only in
|
|
56
|
-
code; weaken protection (authorization,
|
|
56
|
+
code; weaken protection (authorization, `pii`, rules) so a model compiles or renders.
|
|
57
57
|
|
|
58
58
|
**2. Run the lifecycle.** Load `cratis-screenplay-modeling-lifecycle` for modes, the
|
|
59
59
|
independent verdicts V1-V5, the P0-P9 phases with their gates, stop-or-assume,
|
|
@@ -131,7 +131,7 @@ What binds depends on **which tool** you ask, so name the tool and its version:
|
|
|
131
131
|
- `reads` and `concurrency` on a command do not bind (`PLAY0271`), so no decision is
|
|
132
132
|
protected against stale state. A reaction trigger's `reads` that only `invokes` is
|
|
133
133
|
report-only intent (`PLAY0270`); one that `produces` directly fails binding (`PLAY0268`).
|
|
134
|
-
- `persona` declarations are report-only and never block;
|
|
134
|
+
- `persona` declarations are report-only and never block; bare `pii` and `secret`
|
|
135
135
|
concepts do block binding (`PLAY0268`). Keep them anyway: the classification is
|
|
136
136
|
part of the model. Report the block.
|
|
137
137
|
- Generated values/responses bind and reference-execute as v7; sources, streams
|
|
@@ -191,6 +191,16 @@ do not assume; it lands as `module`, `persona` and `import`; protocol in
|
|
|
191
191
|
`cratis-screenplay-discovery`). Phase 2 designs one workflow at a time through all nine steps
|
|
192
192
|
([nine-steps.md](references/nine-steps.md): activities, Screenplay output, questions).
|
|
193
193
|
|
|
194
|
+
## Keep modeling reasoning with its declaration
|
|
195
|
+
|
|
196
|
+
Use `description` for summaries and fenced Markdown `documentation` on modules,
|
|
197
|
+
features, slices, commands, read models and reactions (also events) for assumptions,
|
|
198
|
+
boundaries and rejected alternatives. Do not leave that reasoning only in comments
|
|
199
|
+
or disconnected notes. Both are report-only (PLAY0270), never executable rules.
|
|
200
|
+
Specifications use `description` to name the witnessed behavior; longer reasoning
|
|
201
|
+
belongs to their slice. Syntax, merge rules and diagnostics:
|
|
202
|
+
[model reasoning](../cratis-screenplay-slice-design/references/model-reasoning.md).
|
|
203
|
+
|
|
194
204
|
## The prime directive: do not lose information
|
|
195
205
|
|
|
196
206
|
Store what happened (events), not just current state. Events are immutable
|
|
@@ -243,7 +253,7 @@ compile or will not be safe. Both are deliberate.
|
|
|
243
253
|
## Naming the primitives is the highest-value work
|
|
244
254
|
|
|
245
255
|
Name concepts before events, classify personal data at the concept, keep events past tense and single-purpose, and never put the event-source identity in an event payload.
|
|
246
|
-
Read [references/naming-primitives.md](references/naming-primitives.md) when declaring concepts,
|
|
256
|
+
Read [references/naming-primitives.md](references/naming-primitives.md) when declaring concepts, `pii` classification, event shapes, `identifier`, inline events or `id "<old name>"` pins.
|
|
247
257
|
|
|
248
258
|
## Quick gate - before specifications are called done
|
|
249
259
|
|
package/package/corpus/skills/cratis-screenplay-event-modeling/references/naming-primitives.md
CHANGED
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
`Decimal`, `Bool`, `Date` and `DateTime`; `Enum` is a separate concept kind,
|
|
6
6
|
with its values indented beneath.
|
|
7
7
|
- **Classify personal data at the concept**, with a reason:
|
|
8
|
-
`concept PersonName : String
|
|
8
|
+
`concept PersonName : String pii` plus an indented `pii reason "..."`. Every
|
|
9
9
|
usage inherits it; a reason for an attribute the concept does not declare is an
|
|
10
|
-
error. Decide this before fixing event shapes
|
|
11
|
-
|
|
10
|
+
error. Decide this before fixing event shapes; purpose/basis/retention belong in
|
|
11
|
+
processing-purpose declarations, not a reason. An event subject defaults to the
|
|
12
|
+
source unless supplied; the trailing event-property `subject` mark is report-only
|
|
13
|
+
at 4.127.0, not runtime lineage. See command-surface `references/compliance.md`.
|
|
12
14
|
- **Events are past tense and self-describing** - `InvoiceRegistered`, never
|
|
13
15
|
`Created`. One purpose per event; an event needing an optional property to cover
|
|
14
16
|
two situations is two events.
|
|
@@ -215,8 +215,7 @@ reaction's `reads UnpaidInvoice` is report-only metadata at 4.66.0 (information
|
|
|
215
215
|
it does not make the model consult the view. Binding therefore admits only a scheduled
|
|
216
216
|
invocation that records a timestamp. Choosing which invoices are overdue (due date before the
|
|
217
217
|
clock instant) is a target-side decision: record it as gap-fill with the model as the
|
|
218
|
-
contract (`cratis-screenplay-render-and-gap-fill`), and say so in the slice
|
|
219
|
-
the example does. Do not claim the specification proves the overdue decision.
|
|
218
|
+
contract (`cratis-screenplay-render-and-gap-fill`), and say so in the slice `documentation`. Do not claim the specification proves the overdue decision.
|
|
220
219
|
|
|
221
220
|
```screenplay
|
|
222
221
|
domain Acme.Invoicing
|
package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md
CHANGED
|
@@ -22,7 +22,9 @@ Pins and consumer boundaries: toolchain `references/versions.md`.
|
|
|
22
22
|
| Construct | Current standalone disposition |
|
|
23
23
|
| --- | --- |
|
|
24
24
|
| `persona`, domain/authentication metadata | Report-only; unknown named policies remain source defects |
|
|
25
|
-
| Compliance concepts |
|
|
25
|
+
| Compliance concepts | Bare `pii`/`secret` (4.127.0); binding still refuses PLAY0268, never remove protection |
|
|
26
|
+
| Identity details / processing purposes / event subject | Report-only metadata (4.127.0); executable detail reads refuse PLAY0268, not source declaration errors |
|
|
27
|
+
| Composite stream ids | v8 routing; complete named parts/canonical comparisons, PLAY0515 refuses protected keys/sources; not a legacy text split |
|
|
26
28
|
| Command reads/concurrency | Legacy unprotected decisions, PLAY0271 |
|
|
27
29
|
| Invokes-only trigger reads | Report-only, not protected state; direct production with reads refuses |
|
|
28
30
|
| Generated values/responses | v7 binding/reference execution; Stage 4.51.3 member refusals STAGE-ESM-028/029 |
|
|
@@ -148,12 +148,20 @@ chain per slice before handoff (evidence template); never manufacture references
|
|
|
148
148
|
`<Noun>Updated`): split by intent;
|
|
149
149
|
- refusals: input or constraint rejection is `validate` / `require` / constraint plus
|
|
150
150
|
`then error` with the exact message from code; authorization refusal is `authorize` plus
|
|
151
|
-
`then denied`. Legacy HTTP codes and check order go in the
|
|
151
|
+
`then denied`. Legacy HTTP codes and check order go in the slice `documentation`;
|
|
152
152
|
- a state-dependent rule is `reads <View>` + `require ... message "..."`, marked **NOT enforced
|
|
153
153
|
in the model today**, target named; a unique index with business meaning becomes
|
|
154
154
|
`unique ... on <every event that sets it>` with `released by`
|
|
155
155
|
(`references/rule-modeling.md`);
|
|
156
|
-
-
|
|
156
|
+
- preserve personal-data/secret protection and authorization found in code,
|
|
157
|
+
using bare `pii` / `secret` (4.127.0); deprecated marker repairs keep legal
|
|
158
|
+
notes intact, never guess a purpose or basis. Derive purpose/use/retention
|
|
159
|
+
declarations only from evidence or expert decisions; run `--check purposes`
|
|
160
|
+
and inspect the processing record as prompts, not a legal verdict. Keep
|
|
161
|
+
hand-joined legacy ids scalar; never infer composite parts by splitting text.
|
|
162
|
+
Event `subject` is report-only; distinguish observed lineage from runtime
|
|
163
|
+
realization. See command-surface `references/compliance.md`.
|
|
164
|
+
Every role gate has `authorize`
|
|
157
165
|
plus a `then denied` spec, else a recorded gap; rules you cannot express truthfully are
|
|
158
166
|
recorded one by one, never fabricated.
|
|
159
167
|
3. Cite evidence ids in each slice `description` ("Evidence: E3, E7"). Read `references/intent-example.md` when authoring the intentional candidate to check the complete example of evidence citations, re-slicing, constraints, authorization and recorded state-dependent rules.
|
|
@@ -195,7 +203,7 @@ handoff packet appended, first line `Outcome:`; no prose reports in the model ro
|
|
|
195
203
|
same-application canonical exports with authoritative catalogs; it does not guess
|
|
196
204
|
rename continuity, run specifications or prove recovered behavior. Inspect
|
|
197
205
|
incomplete sections and exclusions before using the result in the loss report.
|
|
198
|
-
- Never weaken protection (authorization,
|
|
206
|
+
- Never weaken protection (authorization, `pii`, rules) to make the candidate compile.
|
|
199
207
|
|
|
200
208
|
## Gate
|
|
201
209
|
|
package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/loss-report-template.md
CHANGED
|
@@ -31,7 +31,7 @@ and the question raised.
|
|
|
31
31
|
One line per rule, named individually (never one generic platform caveat): the rule, its
|
|
32
32
|
evidence row, the invariant and consistency risk, and the target enforcement. State-dependent
|
|
33
33
|
checks are written as `reads` + `require` and marked NOT enforced in the slice description;
|
|
34
|
-
date rules and opaque policies that no declaration can state stay in `
|
|
34
|
+
date rules and opaque policies that no declaration can state stay in the slice `documentation` and here.
|
|
35
35
|
|
|
36
36
|
## Unknowns and undecided target decisions
|
|
37
37
|
| Row/question | What is unknown | Who can answer | Candidate assumption |
|
package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md
CHANGED
|
@@ -4,19 +4,19 @@
|
|
|
4
4
|
- Input or constraint rejection: declarative `validate`, `require` or constraint, plus a
|
|
5
5
|
`then error "<exact legacy message>"` specification.
|
|
6
6
|
- Authorization refusal: `authorize` with a policy (role, claim, authenticated, or an
|
|
7
|
-
ownership policy) plus `then denied`, with caller
|
|
7
|
+
ownership policy) plus `then denied`, with a synthesized persona caller or an explicit effective-gate fixture.
|
|
8
8
|
Every command and query under an inherited module or feature `authorize` gets its own
|
|
9
9
|
`then denied` spec. A role gate with no executable form is a recorded gap.
|
|
10
10
|
- Legacy HTTP status and check order (for example 409 before 403) are facts about the old
|
|
11
|
-
system: record them in
|
|
11
|
+
system: record them in slice `documentation` and the evidence row, not in the model logic.
|
|
12
12
|
|
|
13
13
|
## State-dependent rules
|
|
14
14
|
A rule that depends on stored state (current status, existing records, balances) is written
|
|
15
15
|
as `reads <View>` + `require <expr> message "…"` and the slice description says it is **NOT
|
|
16
16
|
enforced in the model today** (PLAY0268/0271 at binding are expected in design mode;
|
|
17
17
|
Screenplay#129/#209). Name the invariant, the race it leaves open, and the target:
|
|
18
|
-
`[ProtectedDecision]` + `DecisionRead<T>` (Arc 22.39.0 and later;
|
|
19
|
-
|
|
18
|
+
`[ProtectedDecision]` + `DecisionRead<T>` (Arc 22.39.0 and later; available to gap-fill
|
|
19
|
+
in Stage 4.51.3's Arc 22.50.5/Chronicle 19.32.0 package set, not automatically emitted), or a Chronicle
|
|
20
20
|
`concurrency` scope on the event source or stream, or a constraint where one fits. Forbidden: caller-supplied copies of state
|
|
21
21
|
in `require`, boolean inputs standing in for a rule (`confirmsX == true`), and rules hidden in
|
|
22
22
|
`handler`/`implementation hint` prose. Descriptions are not rendered (Stage#178), so a rule
|
package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/signal-to-intent.md
CHANGED
|
@@ -14,7 +14,7 @@ who decided it?* If nobody can answer, classify the row `unknown` and ask.
|
|
|
14
14
|
|---|---|---|---|
|
|
15
15
|
| One request writes several tables | one decision; one table carries the fact, the others are consequences | one event per table (`CheckinCreated`, `HookUpdated`) | one event named for the decision (`CoatTakenIn`); consequences become projections |
|
|
16
16
|
| Generic update route (`PUT /members/{id}`) | several intents hidden behind one form | one `MemberUpdated` event | split by which columns change together and why (address change, suspension, renewal); ask experts. No `Update/Edit/Save<Noun>` command and no `<Noun>Updated/Changed` event; a full-payload `*Updated` event is the default generator output and a review signal |
|
|
17
|
-
| Request with no table write and a 4xx status | a rejected attempt; evidence of a rule | Prologue models it like a success (status codes are ignored) and the merge can strip properties | `validate`/`require`/constraint plus a `then error` spec with the exact message from code (authorization refusals are `then denied`); legacy HTTP code and check order go in
|
|
17
|
+
| Request with no table write and a 4xx status | a rejected attempt; evidence of a rule | Prologue models it like a success (status codes are ignored) and the merge can strip properties | `validate`/`require`/constraint plus a `then error` spec with the exact message from code (authorization refusals are `then denied`); legacy HTTP code and check order go in slice `documentation` |
|
|
18
18
|
| 2xx with no table write | read, idempotent no-op, or external side effect | treated as a command | check code; classify |
|
|
19
19
|
| Single-column unique index | a business uniqueness rule, or a technical key | every unique index becomes a constraint, or a clear business rule is dropped to a bare `rule` | when the meaning is clear, `unique <prop> on <every event that sets it>` plus `released by <removal event>`; list collation, case and reuse questions. Fall back to a bare `rule` only when no constraint form fits, and record that as a loss. A purely technical key stays out |
|
|
20
20
|
| Foreign key | an identity relation between streams or read models | copying the parent id into every event | keep ids only where a consumer needs the value |
|
|
@@ -23,7 +23,7 @@ contract is in `cratis-screenplay-ui-composition`.
|
|
|
23
23
|
|
|
24
24
|
## Verified product sources
|
|
25
25
|
|
|
26
|
-
Current authoring/MCP guidance follows Screenplay v4.
|
|
26
|
+
Current authoring/MCP guidance follows Screenplay v4.127.0
|
|
27
27
|
`Documentation/screenplay/mcp/`, `ast-authoring.md`, `folders.md`, `vscode.md`.
|
|
28
28
|
Discover installed tools and schemas; CLI bundles can differ from the standalone
|
|
29
29
|
tool. Pins are in `cratis-screenplay-toolchain` `references/versions.md`.
|
|
@@ -130,9 +130,9 @@ and applies; others send an edit request ([MCP loop](references/mcp-loop.md)).
|
|
|
130
130
|
3. Prefer `propose-rename` for supported logical renames: it coordinates fragments,
|
|
131
131
|
repairs proven references and preserves assigned identities. Never substitute
|
|
132
132
|
global string replacement for an explicit refusal.
|
|
133
|
-
4. Use `propose-
|
|
134
|
-
|
|
135
|
-
|
|
133
|
+
4. Use `propose-source` for whole text or `propose-ast` for typed edits
|
|
134
|
+
(Authoring defaults); `propose` is executable-only. Batch changes;
|
|
135
|
+
details: `references/mcp-tools.md`.
|
|
136
136
|
5. Keep reference policy `Safe`. Use `Draft` only for deliberately requested
|
|
137
137
|
unresolved model debt and report that debt; it does not waive structural,
|
|
138
138
|
identity or binding-protection checks.
|
|
@@ -178,6 +178,8 @@ each lost comment (`PLAY0288` also reports their count and lines). Untouched
|
|
|
178
178
|
documents retain exact bytes. A printer that loses requested structural fields
|
|
179
179
|
rejects the plan.
|
|
180
180
|
|
|
181
|
+
`identityMigrationIssues`: read the [MCP loop](references/mcp-loop.md).
|
|
182
|
+
|
|
181
183
|
## Repair or extract before rewriting
|
|
182
184
|
|
|
183
185
|
Read `read-workspace` with `view: "diagnostics"`, then `view: "repairs"` at the
|
|
@@ -199,6 +201,7 @@ from silently changing the reviewed candidate.
|
|
|
199
201
|
No automatic generation-evolution repair ships.
|
|
200
202
|
- `PLAY0479`: migrate optionality spelling with `PreserveTrivia`; document scope
|
|
201
203
|
migrates all occurrences together. Keep the `query Q => observable?` exception.
|
|
204
|
+
- Compliance repairs PLAY0565/0653: [MCP tool guide](references/mcp-tools.md).
|
|
202
205
|
|
|
203
206
|
Use `propose-extract-inline-event` on the inline `EventSyntax` handle before adding
|
|
204
207
|
a generation (canonical formatting consent; refuses comment loss; no reverse
|
|
@@ -258,7 +261,8 @@ target or consequence expands.
|
|
|
258
261
|
Readiness has two verdicts: `readiness.authoringAccepted` says the source is valid
|
|
259
262
|
Screenplay; `executableReady` describes only the current executable subset. Do not
|
|
260
263
|
call a model broken because it is not executable, and prefer `propose-ast` for
|
|
261
|
-
full-language
|
|
264
|
+
focused full-language edits, or `propose-source` for whole documents. A rejected
|
|
265
|
+
proposal lists its diagnostics: fix those, do not
|
|
262
266
|
retry the same input.
|
|
263
267
|
|
|
264
268
|
## Code attachments
|
|
@@ -303,7 +307,7 @@ a generated app that silently drops authored UI. Use the Screenplay-owned canoni
|
|
|
303
307
|
corpus fixture path when it exists instead of copying `.play` examples into this
|
|
304
308
|
repository.
|
|
305
309
|
|
|
306
|
-
Repair and refactoring guidance follows Screenplay v4.
|
|
310
|
+
Repair and refactoring guidance follows Screenplay v4.127.0. The Cratis
|
|
307
311
|
CLI bundles its own Screenplay version, so check the installed `tools/list`
|
|
308
312
|
schemas before relying on a view or argument named here (for example
|
|
309
313
|
`dropped-comments` or `implementation-requirements`). Do not invent a command,
|
package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
## Contents
|
|
7
7
|
|
|
8
8
|
- Accepted constructs
|
|
9
|
+
- Caller, subject and stream nodes
|
|
9
10
|
- Container dependencies and exact numbers
|
|
10
11
|
- Complete model
|
|
11
12
|
- Source validity is not execution
|
|
@@ -21,7 +22,7 @@ repository is the full list; this page is the authoring summary.
|
|
|
21
22
|
## Accepted constructs
|
|
22
23
|
|
|
23
24
|
**Top level:** `domain`, `import`, `concept`, `type`, `policy`, `persona`,
|
|
24
|
-
`authentication`, `trigger`, `theme`, `layout`, `ui profile`, `behavior`,
|
|
25
|
+
`authentication`, `identity`, `purpose`, `trigger`, `theme`, `layout`, `ui profile`, `behavior`,
|
|
25
26
|
`module`, `seed`, authoring-only `system`, and admitted `eventsource` with its `stream`s (ESM v8).
|
|
26
27
|
|
|
27
28
|
**Inside a module:** `description`, `authorize`, `import "<glob>"`,
|
|
@@ -59,13 +60,37 @@ compiling the entire document set.
|
|
|
59
60
|
|
|
60
61
|
Concept primitives are `Uuid`, `String`, `Int`, `Decimal`, `Bool`, `Date` and
|
|
61
62
|
`DateTime`; `Enum` is a separate concept kind whose members are indented below
|
|
62
|
-
it. Concepts
|
|
63
|
+
it. Concepts carry bare `pii` (`personal` alias), `secret`, reasons, personal-data
|
|
64
|
+
qualifiers, secret scopes and validation. Legacy markers report PLAY0565 information;
|
|
65
|
+
repeated header markers report PLAY0653 warning. Purposes declare the use/basis/retention
|
|
66
|
+
separately; see command-surface `references/compliance.md`.
|
|
63
67
|
|
|
64
68
|
Projections and captures use their dedicated sub-grammars. Inline code uses a
|
|
65
69
|
tagged fence (` ```csharp `); the older language-line form still parses with
|
|
66
70
|
warning `PLAY0397`. Query the MCP's `syntax-schema` instead of inventing JSON
|
|
67
71
|
members or translating names from memory.
|
|
68
72
|
|
|
73
|
+
## Caller, subject and stream nodes
|
|
74
|
+
|
|
75
|
+
At v4.127.0 the typed syntax includes `IdentityExpressionSyntax` (`$identity`),
|
|
76
|
+
`IdentitySyntax`, `IdentityDetailSyntax`, `ClaimIdentitySourceSyntax`,
|
|
77
|
+
`QueryIdentitySourceSyntax`, `CodeIdentitySourceSyntax`, `FileIdentitySourceSyntax`.
|
|
78
|
+
`ApplicationSyntax.Identity` carries the block; query schemas before editing JSON.
|
|
79
|
+
Built-in caller paths are aliases of `$context.identity`; declared detail reads
|
|
80
|
+
are authoring-only and refuse executable binding (PLAY0268), while the block alone
|
|
81
|
+
does not block readiness. Claim/query sources have exactly one source and no body.
|
|
82
|
+
See command-surface `references/context.md` for key/type/gate restrictions.
|
|
83
|
+
|
|
84
|
+
`PropertySyntax.isSubject` marks an event's required unprotected scalar subject,
|
|
85
|
+
omitted from structural JSON when false. It is lineage metadata (PLAY0270), not
|
|
86
|
+
runtime subject propagation or generated C# `[Subject]`. Read-model marks are
|
|
87
|
+
unsupported. `ReactionSyntax.RunsAs` / `ReactionIdentitySyntax` carry the system
|
|
88
|
+
actor (ESM v10); MCP `declaration-details` includes `runsAs`.
|
|
89
|
+
|
|
90
|
+
`EventStreamIdPartSyntax` and `streamIdParts` describe a composite stream-id schema;
|
|
91
|
+
route mappings cover all named parts. Current routes are admitted as v8, not an
|
|
92
|
+
old PLAY0268 gap. Never infer composite parts by splitting legacy scalar ids.
|
|
93
|
+
|
|
69
94
|
## Container dependencies and exact numbers
|
|
70
95
|
|
|
71
96
|
At Screenplay 4.125.0, modules and features accept `depends on <Name>`, one
|
|
@@ -229,7 +254,7 @@ Screenplay 4.66.0 (before 3.28.2, Screenplay 4.60.1, differ where stated).
|
|
|
229
254
|
| Binds as ESM v7 on standalone Screenplay 4.68.0 (source and release notes; `PLAY0268` on the 4.66.0 in Cratis CLI 3.28.x, probed) | `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 a generated property on a concept with validation rules is `PLAY0268`. Stage 4.24.2 does not render them (`STAGE-ESM-016`, tracked in Stage#201): gap-fill |
|
|
230
255
|
| Authorable, not executable (PLAY0268) | Systems/operations, exact numbers and refusal/redelivery remain unadmitted |
|
|
231
256
|
| 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 on 4.125.0. Whole-workspace binding determines executable availability; CLI/Stage realization remains separate |
|
|
232
|
-
| Blocks binding (`PLAY0268`) |
|
|
257
|
+
| Blocks binding (`PLAY0268`) | `pii`/`secret` concepts (also legacy spellings; historical probe: "compliance attributes require portable data-subject semantics"), command `handler` (never binds; a command cannot declare both `produces` and `handler`, `PLAY0035`), bare `rule <Name>`, `require` or conditions over read-model paths, 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 whose keyed queries in its own slice do not share one `by` property (none, or two different properties; several queries over the same property bind), any query other than `=> <ReadModel> optional` with one caller-supplied `by` argument (so also observable, filtered, scoped and performer-backed queries), `$causedBy` and templates in projections |
|
|
233
258
|
| Blocks binding (`PLAY0271`, legacy meaning) | Command `reads` and `concurrency` |
|
|
234
259
|
| Deferred (`PLAY0269`, information) | Screens, layouts, templates, forms, contributions, UI profiles, themes, behaviors and `on`/`uses` |
|
|
235
260
|
| Metadata only (`PLAY0270`, information) | `domain`, `seed`, `persona`, trigger and other descriptions, and `file` provenance on declarations |
|
|
@@ -264,9 +289,11 @@ Use standalone `screenplay test` or MCP `run-specifications` for a reference
|
|
|
264
289
|
verdict, and independently check CLI/Stage admission. Never drop a contract to bind.
|
|
265
290
|
Generated values and `returns` are no longer in this group: they bind from 4.68.0 (ESM v7).
|
|
266
291
|
Protected reads and `derive`/`provide` (not admitted by any supported ESM version) have no documented
|
|
267
|
-
syntax at v4.68.0: do not teach or invent one. Affected-instance declarations
|
|
268
|
-
|
|
269
|
-
|
|
292
|
+
syntax at v4.68.0: do not teach or invent one. Affected-instance declarations and query paging/sorting/change-set delivery
|
|
293
|
+
remain unavailable here. Event `subject` is report-only authoring metadata at
|
|
294
|
+
4.127.0; public events/origin are admitted as ESM v9 (not provider realization).
|
|
295
|
+
Purpose declarations, references and processing records are authoring metadata,
|
|
296
|
+
not retention or lawful-processing enforcement.
|
|
270
297
|
|
|
271
298
|
`Type optional` is canonical for admitted type references; `Type?` remains
|
|
272
299
|
compatible with information `PLAY0479`. The modifier follows `[]` for an optional
|