@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
package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md
CHANGED
|
@@ -33,7 +33,7 @@ exchange does not make that decision atomic.
|
|
|
33
33
|
Run it when ownership, autonomy or integration decisions are missing; skip it when the user or
|
|
34
34
|
the model already states all three. Ask one question at a time, offer the options, and follow
|
|
35
35
|
the trigger. Unattended: assume the most conservative option, mark it `ASSUMED` in the slice or
|
|
36
|
-
module `description` and
|
|
36
|
+
module `description`, give the reason in its `documentation`, and add it to `STATE.md`.
|
|
37
37
|
|
|
38
38
|
| # | Question (options) | Decides | Follow-up trigger |
|
|
39
39
|
|---|---|---|---|
|
|
@@ -88,7 +88,7 @@ Processors: <trigger -> decision/effect -> result; operational owner>
|
|
|
88
88
|
External: <system -> adapter owner -> contract>
|
|
89
89
|
Open: <unresolved decisions, each also in STATE.md>
|
|
90
90
|
```
|
|
91
|
-
Keep durable rationale in module, feature and slice
|
|
91
|
+
Keep durable rationale in module, feature and slice `documentation` and the record's `Open` lines in
|
|
92
92
|
`STATE.md`. Do not build a second catalogue that duplicates the model.
|
|
93
93
|
|
|
94
94
|
## Cross-boundary walkthrough
|
|
@@ -137,7 +137,7 @@ integration support.
|
|
|
137
137
|
- Treat a public event like a published API: evolution follows `evolution.md` with the
|
|
138
138
|
consumers named, and breaking changes become new events.
|
|
139
139
|
- Screenplay has no public/internal marker. Record the classification in the event's
|
|
140
|
-
`
|
|
140
|
+
`documentation`, and keep the list in `STATE.md`.
|
|
141
141
|
|
|
142
142
|
## Crossing a boundary in Screenplay
|
|
143
143
|
| Situation | Construct |
|
|
@@ -10,8 +10,9 @@ event-source id) are present. Three runtime defects are **open at v19.32.0**: #3
|
|
|
10
10
|
InMemory providers do not settle unique claims), #4123 (constraint index updates run after commit
|
|
11
11
|
and fail silently) and #4131 (composite unique constraints collide when a component contains the
|
|
12
12
|
separator). Arc **v22.50.5** has `[ProtectedDecision]` (since v22.39.0, needs Chronicle 19.23 or
|
|
13
|
-
later); Stage
|
|
14
|
-
|
|
13
|
+
later); Stage 4.51.3 rendered apps pin Arc 22.50.5 and Chronicle client/kernel
|
|
14
|
+
19.32.0, so the APIs are available to gap-fill, not automatically emitted or
|
|
15
|
+
protected (see `consistency-and-concurrency.md` section 3). Re-check the issues before relying on a
|
|
15
16
|
constraint in a new release.
|
|
16
17
|
A concurrency scope's first append is unchecked by default at v19.32.0; see
|
|
17
18
|
SKILL.md, ‘First append into a scope’.
|
|
@@ -42,10 +43,14 @@ protection: keep the invariant and its race outcome as explicit target requireme
|
|
|
42
43
|
A namespace scopes event positions, claims, observer progress and encryption keys. State
|
|
43
44
|
whether uniqueness and completion are per tenant or genuinely cross-tenant.
|
|
44
45
|
|
|
45
|
-
Decide the data subject before the event
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
Decide the data subject before the event/view shape: one person per event or
|
|
47
|
+
read-model instance, not necessarily the stream's identity. At Screenplay 4.127.0
|
|
48
|
+
trailing event `subject` is report-only lineage, not runtime propagation or C#
|
|
49
|
+
`[Subject]`; read-model marks remain unsupported. Use bare `pii` for personal
|
|
50
|
+
values and `secret` for operational secrets on concepts, never on identities or
|
|
51
|
+
subjects. Current PLAY0515 is a source error, including destinations, stream-id
|
|
52
|
+
parts and nested route sources (Chronicle CHR0034/0052 likewise reject protected
|
|
53
|
+
source ids). Use a surrogate identity and protected payload. Bearer tokens, magic links and
|
|
49
54
|
signed URLs are never facts; record a keyed hash or a reference.
|
|
50
55
|
|
|
51
56
|
Redaction (payload replacement keeping the sequence slot) and crypto-erasure serve compliance
|
|
@@ -16,6 +16,16 @@
|
|
|
16
16
|
Pins: Screenplay v4.66.0, Chronicle v19.32.0, Arc v22.50.5, Stage v4.24.2 (table in `versions.md` of
|
|
17
17
|
`cratis-screenplay-toolchain`).
|
|
18
18
|
|
|
19
|
+
Current routing identity checks (4.127.0): PLAY0515 refuses personal/secret
|
|
20
|
+
concepts in stream-id types, composite parts and route sources, including nested
|
|
21
|
+
paths. Composite keys require every named scalar part, not a legacy separator
|
|
22
|
+
split. Text must be well-formed, nonempty NFC and Double integer ids bounded by
|
|
23
|
+
±(2^53−1); PLAY0504 is an error for routed nominal destination-type mismatch.
|
|
24
|
+
Canonical specification comparisons preserve part order and treat UUID case
|
|
25
|
+
variants as equal. Key-schema evolution for stored events requires a new stream
|
|
26
|
+
identity or migration. These checks do not protect command decision reads.
|
|
27
|
+
Details: toolchain `references/sources-and-streams.md`.
|
|
28
|
+
|
|
19
29
|
## 1. Invariant table (fill before writing constraints)
|
|
20
30
|
| # | Rule (business words) | Data it needs | Decided atomically where | Screenplay construct | Status | Race / retry outcome |
|
|
21
31
|
|---|---|---|---|---|---|---|
|
|
@@ -61,7 +71,8 @@ Right: write the rule as stated intent and mark it unenforced.
|
|
|
61
71
|
- `reads <View> as x by …` plus `require <expr over x> message "…"` on the command (the
|
|
62
72
|
`StateChange` slice in `streams-example.md`). Binding reports PLAY0271 / PLAY0268; that is
|
|
63
73
|
expected in design mode, so keep the lines. Do not remove them to pass a tool.
|
|
64
|
-
- Slice `description
|
|
74
|
+
- Slice `description`: one short marker per rule, `NOT enforced in the model today; target: <mechanism>`.
|
|
75
|
+
- Slice fenced `documentation`, one block per rule:
|
|
65
76
|
- Requirement: the business rule in business words.
|
|
66
77
|
- Status: NOT enforced in the model today (Screenplay#129, #209).
|
|
67
78
|
- Decision inputs: the authoritative facts or state.
|
|
@@ -98,15 +109,17 @@ example a course capacity computed from enrolment streams, needs option a or b:
|
|
|
98
109
|
deciding fact on the source that owns the state, or give each scarce item its own identity. Sources: Arc `v22.50.5:Documentation/backend/csharp/chronicle/read-models/injecting-into-commands.md`;
|
|
99
110
|
`chronicle-boundaries.md`.
|
|
100
111
|
|
|
101
|
-
**Availability
|
|
102
|
-
Chronicle client 19.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
112
|
+
**Availability in Stage-rendered applications.** Stage v4.51.3 scaffolds Arc 22.50.5
|
|
113
|
+
and Chronicle client/kernel 19.32.0. `[ProtectedDecision]` and `DecisionRead<T>` /
|
|
114
|
+
`IDecisionReads` exist in that package set; source checks are in
|
|
115
|
+
`cratis-stage-rendering-and-sandbox` `references/rendered-application.md`.
|
|
116
|
+
This does not mean Stage emits protected decisions. Gap-fill must opt into the
|
|
117
|
+
protected command profile, use an admitted projection/key shape and enroll the
|
|
118
|
+
read in the active unit of work. For refused shapes choose option a/b (state on
|
|
119
|
+
its owning stream or one identity per scarce item), or agreed compensation c.
|
|
120
|
+
Keep the rule **NOT enforced in the model today** with its race consequence.
|
|
121
|
+
Never infer protection from `.play` `reads` + `require`, weaken the rule to render,
|
|
122
|
+
or edit managed dependency files. Older Stage 4.24.x scaffolds predate these APIs.
|
|
110
123
|
|
|
111
124
|
## 4. Concurrency scenarios
|
|
112
125
|
For each enforced or recorded rule write three short scenarios:
|
|
@@ -143,7 +156,7 @@ The append may commit while the reply is lost. The caller retries. Decide per co
|
|
|
143
156
|
rejection the caller must see; never report it as success;
|
|
144
157
|
- **new identifier** -> duplicate unless a business-key constraint exists.
|
|
145
158
|
The model shows only the rejection; payload comparison and outcome replay are target
|
|
146
|
-
behaviour. Write the answer in the slice `
|
|
159
|
+
behaviour. Write the answer in the slice `documentation`.
|
|
147
160
|
|
|
148
161
|
## 7. Ordering
|
|
149
162
|
- Within one source, facts are in append order. Across sources, do not assume an order
|
package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/evolution.md
CHANGED
|
@@ -16,7 +16,7 @@ compatibility scenarios below first; the identity owner then applies the change
|
|
|
16
16
|
|
|
17
17
|
| Change | Old facts still mean the same? | Screenplay action | Edit class |
|
|
18
18
|
|---|---|---|---|
|
|
19
|
-
| add a property with a business-defined value for old facts | yes | new `generation N+1`, every generation declared in full in the same slice; record the default for old facts in
|
|
19
|
+
| add a property with a business-defined value for old facts | yes | new `generation N+1`, every generation declared in full in the same slice; record the default and its reason for old facts in slice `documentation` | contract evolution |
|
|
20
20
|
| add a property with no sensible old value | the old fact lacks information | usually a **new event** for the new situation, or a separate fact recording the extra information | review with the expert |
|
|
21
21
|
| remove a property | yes, if no reader needs it | new generation without it; every reference fails with PLAY0273 until removed | contract evolution, check readers |
|
|
22
22
|
| change meaning (same name, different business fact) | **no** | **new event** with its own name; old event stays for history | identity: add, not rename |
|
|
@@ -28,7 +28,7 @@ A test for "generation or new event": a new version must be convertible from the
|
|
|
28
28
|
without inventing facts. If it is not, it is a different event.
|
|
29
29
|
|
|
30
30
|
## Compatibility scenarios (write before editing)
|
|
31
|
-
For each changed event, answer in the slice `
|
|
31
|
+
For each changed event, answer in the slice `documentation` or `STATE.md`:
|
|
32
32
|
1. **Replay**: does every projection still build from generation 1 facts? Which value do old
|
|
33
33
|
facts give the new property (default, absent, derived)?
|
|
34
34
|
2. **Readers**: which projections, reactions, constraints, specifications and other modules
|
|
@@ -20,6 +20,15 @@ A stream in Screenplay is the event source a production lands on: `identifier` o
|
|
|
20
20
|
command, `for <identifier>` on each `produces`, `$eventSourceId` in projections, `for "<id>"`
|
|
21
21
|
in specifications. Choosing the identifier *is* choosing the stream.
|
|
22
22
|
|
|
23
|
+
Composite stream keys (Screenplay 4.127.0) declare `streamId` with two or more
|
|
24
|
+
named scalar parts and map every part on routes (specification parts are literals).
|
|
25
|
+
Scalar forms remain valid. Text is nonempty, well-formed NFC; Double integer ids
|
|
26
|
+
stay within ±(2^53−1). Protected concepts cannot be key types/parts or mapping
|
|
27
|
+
sources (PLAY0515); choose surrogate keys and keep protection in payloads.
|
|
28
|
+
Canonical encoding formats parts, escapes `%`/`|`, and joins in declaration order;
|
|
29
|
+
never split hand-joined legacy text by guesswork. A stored key-schema change needs
|
|
30
|
+
a new stream identity or migration. See toolchain `references/sources-and-streams.md`.
|
|
31
|
+
|
|
23
32
|
## Identity and event-membership review
|
|
24
33
|
Start from the business instance, then choose its representation. A generated id can name a
|
|
25
34
|
real instance; a readable constant can hide a collection. Write one sentence per identity
|
|
@@ -5,7 +5,7 @@ cross-stream references as payload, three kinds of uniqueness constraint, a stat
|
|
|
5
5
|
rule recorded as **NOT enforced in the model today**, a declared `concurrency` scope, and an
|
|
6
6
|
active-state view with removal. Read it with `consistency-and-concurrency.md` (sections 1-4).
|
|
7
7
|
|
|
8
|
-
The model compiles (V1, warnings as errors) but is not binding-ready by design: the
|
|
8
|
+
The model compiles at 4.127.0 (V1, warnings as errors) but is not binding-ready by design: the `pii`
|
|
9
9
|
concept fails binding (PLAY0268), `reads` and the `concurrency` block are PLAY0271, and
|
|
10
10
|
`require` over a view is PLAY0268. Keep those lines: they state real intent.
|
|
11
11
|
|
|
@@ -14,7 +14,7 @@ concept fails binding (PLAY0268), `reads` and the `concurrency` block are PLAY02
|
|
|
14
14
|
// Shows: one business identity per stream, cross-stream references as payload, uniqueness
|
|
15
15
|
// constraints (single, composite with release, unique event), a recorded state-dependent rule
|
|
16
16
|
// that Screenplay cannot enforce, a declared concurrency scope, and an active-state view with removal.
|
|
17
|
-
//
|
|
17
|
+
// Historical binding probes refused compliance; the pii concept still fails binding (PLAY0268), the
|
|
18
18
|
// concurrency block and `reads` are PLAY0271, `require` over a view is PLAY0268. Keep them: they state
|
|
19
19
|
// real intent. The capacity rule is NOT enforced in the model today (see the slice description).
|
|
20
20
|
|
|
@@ -23,7 +23,7 @@ domain Acme.Academy
|
|
|
23
23
|
concept MemberId : Uuid // event source id of one member stream
|
|
24
24
|
concept CourseId : Uuid // event source id of one course stream
|
|
25
25
|
concept EnrolmentId : Uuid // event source id of one enrolment stream
|
|
26
|
-
concept Email : String
|
|
26
|
+
concept Email : String pii
|
|
27
27
|
pii reason "Identifies a person"
|
|
28
28
|
validate
|
|
29
29
|
not empty message "An email is required"
|
|
@@ -22,7 +22,7 @@ files is one application: always check the folder, never one file of it.
|
|
|
22
22
|
|
|
23
23
|
When choosing or upgrading a tool, or checking version-specific capabilities, read `references/versions.md`; it is the only version table, and other skills point to it.
|
|
24
24
|
|
|
25
|
-
The standalone pin is Screenplay 4.
|
|
25
|
+
The standalone pin is Screenplay 4.127.0. CLI 3.41.0 bundles Screenplay 4.114.0,
|
|
26
26
|
Stage 4.51.3 and Cratis.Arc.Screenplay 22.54.0. The single version table records
|
|
27
27
|
released source evidence and historical probes separately; do not relabel an old
|
|
28
28
|
render/browser result as a probe of the current packages.
|
|
@@ -31,7 +31,7 @@ Historical screens-release evidence: CLI 3.40.7 / Stage 4.51.1 / bundled
|
|
|
31
31
|
Screenplay 4.114.0 opened the canonical corpus with `executableReady true`
|
|
32
32
|
and the stdio transcript exposed 37 tools; standalone language 4.122.0 was
|
|
33
33
|
recorded in that vector. These retained results are not a rerun on CLI 3.41.0
|
|
34
|
-
or Screenplay 4.
|
|
34
|
+
or Screenplay 4.127.0.
|
|
35
35
|
|
|
36
36
|
## Ground rules
|
|
37
37
|
|
|
@@ -49,7 +49,7 @@ or Screenplay 4.125.0.
|
|
|
49
49
|
5. **Capability is not correctness.** The tool you ran decides what is accepted today; the
|
|
50
50
|
domain and the documented semantics decide what is correct. On conflict keep the correct
|
|
51
51
|
model and record a tool gap; never reshape a model to silence a tool.
|
|
52
|
-
6. **Never remove
|
|
52
|
+
6. **Never remove `pii`, `secret`, authorization, list queries, automations or rules
|
|
53
53
|
to reach V3 or a render.** Report the verdict as blocked with the codes.
|
|
54
54
|
7. **A clean verdict proves only its own layer.** "Not run" with the reason is a valid
|
|
55
55
|
result. Specifications written or bound are never specifications passing.
|
|
@@ -90,7 +90,7 @@ server with a fixed root when the tool is older than 4.63.2 (the roots bug hit 4
|
|
|
90
90
|
4.60.1 bundled by cratis before 3.28.2; 4.66.0 and later and cratis 3.28.2 are fine). A subagent without MCP reports "V2 not run: no MCP in this agent".
|
|
91
91
|
|
|
92
92
|
One line per verdict, tool first, for example `V1 pass (screenplay 4.68.0, 3 files)` and
|
|
93
|
-
`V3 blocked: PLAY0268 x3 (list query,
|
|
93
|
+
`V3 blocked: PLAY0268 x3 (list query, pii)`. Name the source identity (commit plus the digest from
|
|
94
94
|
the source-identity helper (`cratis-screenplay-modeling-lifecycle` `references/verdicts-and-modes.md` "Source identity")) the verdict ran on; keep it apart from the MCP
|
|
95
95
|
`modelRevision`, which is semantic and, without `.screenplay/identities.json`,
|
|
96
96
|
changes with the root folder name.
|
|
@@ -101,7 +101,7 @@ changes with the root folder name.
|
|
|
101
101
|
`references/cheat-sheet.md`. Read [references/cheat-sheet-example.md](references/cheat-sheet-example.md) when you need one complete design-mode document with every construct family.
|
|
102
102
|
- **Executable** (binds, V3): `references/executable-subset.md`. Keyed optional queries
|
|
103
103
|
only; no handler (PLAY0268, with or without `implementation`/`hint`); `reads` and
|
|
104
|
-
`concurrency` do not bind (PLAY0271); no
|
|
104
|
+
`concurrency` do not bind (PLAY0271); no compliance markers (`pii`/`secret`); v6 constructs bind on Screenplay 4.61 or
|
|
105
105
|
later (standalone, and cratis 3.28.2 or later); generated values and `returns` responses bind (ESM v7)
|
|
106
106
|
from Screenplay 4.68.0 (also in the current CLI bundle) (`references/generated-responses-example.md`). Read [references/executable-example.md](references/executable-example.md) when you need a small StateChange and StateView model that binds executable, [references/pdl-example.md](references/pdl-example.md) when writing projection forms that bind and run, and [references/automation-translate-example.md](references/automation-translate-example.md) when writing Automation and Translate slices (ESM v6).
|
|
107
107
|
- **Renderable** (V5): `references/renderable-subset.md` retains explicitly labeled
|
|
@@ -112,6 +112,13 @@ changes with the root folder name.
|
|
|
112
112
|
render refuses versions above v7 (`CLI-RENDER-004`). Operations and exact numeric
|
|
113
113
|
mode remain authorable/unadmitted. Details: `references/sources-and-streams.md`.
|
|
114
114
|
|
|
115
|
+
- **Caller/compliance metadata** at 4.127.0: `$identity` aliases caller built-ins;
|
|
116
|
+
additional identity details are metadata and executable reads still refuse.
|
|
117
|
+
Bare `pii`/`secret` replace legacy spellings; `pii personal` repeats one marker
|
|
118
|
+
(PLAY0653). Purposes/checks/processing records and event `subject` are report-only,
|
|
119
|
+
not legal compliance, retention or runtime subject realization. See
|
|
120
|
+
command-surface `references/context.md` and `references/compliance.md`.
|
|
121
|
+
|
|
115
122
|
## Edit strategy
|
|
116
123
|
|
|
117
124
|
- **Discover the capabilities available** (tool, version, `tools/list`, model root) once,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
One complete document with every construct family. Design mode, not executable. Prose rules: [cheat-sheet.md](cheat-sheet.md); tool versions: [versions.md](versions.md); what binds: [executable-subset.md](executable-subset.md).
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Binding blockers: unquoted import, `pii`, `reads` (PLAY0271), `starts with`, observable/list/filter query. Executable shapes are in the sibling examples. The bare-marker fence compiles warning-free on standalone 4.127.0; the earlier legacy-marker version compiled on 4.66.0 and CLI 3.28.2. `RecordingAPayment` lists the `InvoiceClosed` cascade, which the cratis 3.27.1 bundle (4.60.1) rejected with a false PLAY0285 ("outcome cannot be produced by 'RecordPayment'"); 3.28.2 accepts it.
|
|
6
6
|
|
|
7
7
|
```screenplay
|
|
8
8
|
// Design-mode cheat-sheet: every construct family; compiles warning-free on the standalone tool.
|
|
@@ -12,7 +12,7 @@ import Customers.CustomerRegistered // unquoted = another bounded context
|
|
|
12
12
|
|
|
13
13
|
concept InvoiceId : Uuid // primitives: Uuid String Int Decimal Bool Date DateTime Enum
|
|
14
14
|
concept PaymentId : Uuid
|
|
15
|
-
concept Email : String
|
|
15
|
+
concept Email : String pii // pii / secret (blocks executability)
|
|
16
16
|
pii reason "Identifies a person"
|
|
17
17
|
validate
|
|
18
18
|
not empty message "An email is required"
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
- PDL quick reference (most forms are compiled in `pdl-example.md` or `cheat-sheet-example.md`; `remove via join` and `$eventContext.occurred` are not)
|
|
13
13
|
- Specification forms
|
|
14
14
|
|
|
15
|
-
Current pins: standalone Screenplay 4.
|
|
15
|
+
Current pins: standalone Screenplay 4.127.0 / CLI 3.41.0; `versions.md` is the
|
|
16
16
|
single table. Compile evidence below keeps its historical tool labels.
|
|
17
17
|
|
|
18
18
|
The syntax lives in compiled example files next to this one (each is a Markdown file holding
|
|
@@ -105,6 +105,17 @@ a reference scenario that supplies only a clock carries no caller audit identity
|
|
|
105
105
|
reference runner before relying on identity paths in a specification. Renderable:
|
|
106
106
|
`$context.occurred` only.
|
|
107
107
|
|
|
108
|
+
At 4.127.0, `$identity.id`/`.name`/`.userName` map to the same ESM kinds as
|
|
109
|
+
`$context.identity`; prefer the shorter root, but the older one stays supported.
|
|
110
|
+
Other built-ins parse but roles/claims/authentication status do not bind in
|
|
111
|
+
produces mappings. Identity details are metadata: executable detail reads report
|
|
112
|
+
PLAY0268. See command-surface `references/context.md`.
|
|
113
|
+
|
|
114
|
+
Use bare `pii`/`secret` on concepts (`personal` aliases `pii`); legacy markers
|
|
115
|
+
are PLAY0565 information and repeated markers are PLAY0653 warning. Event `subject`
|
|
116
|
+
is report-only lineage; processing purposes/checks/reports declare use, not lawful
|
|
117
|
+
processing or runtime retention. See command-surface `references/compliance.md`.
|
|
118
|
+
|
|
108
119
|
## `$eventContext.` (projections)
|
|
109
120
|
`eventType{.id,.generation,.tombstone}`, `eventSourceType`, `eventSourceId`, `eventStreamType`,
|
|
110
121
|
`eventStreamId`, `sequenceNumber`, `occurred`, `occurred.Week`, `eventStore`, `namespace`,
|
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
- Warnings that hide defects (always validate with `--warnings-as-errors`)
|
|
6
6
|
- Source reference and identifier checks
|
|
7
|
+
- Caller identity, compliance and routes
|
|
8
|
+
- Specification metadata, callers, cases and locators
|
|
9
|
+
- Guarded interaction diagnostics
|
|
7
10
|
- Structural completeness and timeline checks
|
|
8
11
|
- Editor versus C# verdicts
|
|
9
12
|
- Consistency errors (V1: the model contradicts itself)
|
|
@@ -36,7 +39,7 @@ then STAGE (V5 admission). Tool differences: `versions.md`.
|
|
|
36
39
|
|
|
37
40
|
## Source reference and identifier checks
|
|
38
41
|
|
|
39
|
-
At Screenplay 4.
|
|
42
|
+
At Screenplay 4.127.0 these are V1 source checks, not binding-only gaps:
|
|
40
43
|
|
|
41
44
|
| Code | Severity | Meaning |
|
|
42
45
|
| --- | --- | --- |
|
|
@@ -46,6 +49,116 @@ At Screenplay 4.125.0 these are V1 source checks, not binding-only gaps:
|
|
|
46
49
|
|
|
47
50
|
Legacy compliance spellings (`@pii`/`@sensitive`) do not evade PLAY0515.
|
|
48
51
|
|
|
52
|
+
## Caller identity, compliance and routes
|
|
53
|
+
|
|
54
|
+
Source authority: v4.127.0 `diagnostics.md`, `identity.md`, `concepts.md`,
|
|
55
|
+
`purposes.md`, `events.md`, `event-sources.md`, `reactions.md`.
|
|
56
|
+
|
|
57
|
+
| Code | Severity | Meaning / fix |
|
|
58
|
+
| --- | --- | --- |
|
|
59
|
+
| PLAY0152 | E | Bare `$identity` needs a property path |
|
|
60
|
+
| PLAY0155 | W | A `$identity` or `$context.identity` path names a property the caller does not carry; correct the built-in/detail name (claims suffixes are opaque) |
|
|
61
|
+
| PLAY0633 | E | Invalid identity header; write bare `identity` |
|
|
62
|
+
| PLAY0634 | E | Second identity block in one document; a second file uses the folder singular-declaration diagnostic |
|
|
63
|
+
| PLAY0635 | E | Invalid typed detail or escape source; exactly one source per detail |
|
|
64
|
+
| PLAY0636 | E | Unknown source kind; use claim, query, inline code or file |
|
|
65
|
+
| PLAY0637 | E | Detail has no source/implementation |
|
|
66
|
+
| PLAY0638 | E | Claim/query source has a body; refresh/cache belongs to runtime |
|
|
67
|
+
| PLAY0639 | E | Duplicate detail name |
|
|
68
|
+
| PLAY0640 | E | Detail redeclares a token built-in |
|
|
69
|
+
| PLAY0641 | E | Unknown/ambiguous source query |
|
|
70
|
+
| PLAY0642 | E | Source query is unkeyed or returns a list |
|
|
71
|
+
| PLAY0643 | E | Query source lacks `by <expression>` |
|
|
72
|
+
| PLAY0644 | E | Query key reads more than built-ins, claims or literals |
|
|
73
|
+
| PLAY0645 | E | Source query's effective gate depends on details |
|
|
74
|
+
| PLAY0646 | E | Result type/optionality differs from detail; optional result needs optional detail |
|
|
75
|
+
| PLAY0565 | I | Deprecated `@pii`, `sensitive`, `@sensitive`; repair to bare `pii`/`secret`, preserving notes/trivia |
|
|
76
|
+
| PLAY0566 | E | Unknown concept marker |
|
|
77
|
+
| PLAY0567/0568 | E | Invalid secret scope / repeated scope |
|
|
78
|
+
| PLAY0569 | W | Explicit secret scope ignored on `pii secret` because only `[PII]` renders |
|
|
79
|
+
| PLAY0570/0571 | E | Invalid personal-data qualifier/category / repeated special category |
|
|
80
|
+
| PLAY0653 | W | Repeated concept-header compliance marker; `pii personal` is one marker repeated. Keep the first; body settings stay attached; canonical printing writes one marker |
|
|
81
|
+
| PLAY0590 | E | More than one event subject; choose one, no safe automatic repair |
|
|
82
|
+
| PLAY0591 | E | Subject not required scalar String/Uuid or a String/Uuid/Int-backed concept |
|
|
83
|
+
| PLAY0592 | E | Protected subject concept; EventContext.Subject is plaintext, use a surrogate |
|
|
84
|
+
| PLAY0593 | E | Subject modifier outside event properties |
|
|
85
|
+
| PLAY0594 | E | Read-model subject mark is unsupported |
|
|
86
|
+
| PLAY0595 | E | Repeated/out-of-order subject modifier; write it last |
|
|
87
|
+
| PLAY0596/0597/0598/0599 | E | Malformed purpose declaration/reference/field; unknown closed value; repeated singleton; duplicate purpose name, respectively |
|
|
88
|
+
| PLAY0600/0601 | W | Unknown purpose reference / inconsistent legitimate-interest declaration |
|
|
89
|
+
| PLAY0602–0606 | W | Opt-in purposes coverage: uncovered pii, missing Art. 9 condition, Art. 10 authorization, basis, or unused purpose |
|
|
90
|
+
| PLAY0647 | E | Malformed/repeated/misplaced `runs as`, empty/duplicate role; one reaction-level line with quoted roles (zero allowed) |
|
|
91
|
+
| PLAY0648 | W | Gated invocation without declared identity; an authorization refusal branch gets PLAY0557 instead, once per invocation |
|
|
92
|
+
| PLAY0649 | W | Identity declared without invokes or inline/file implementation |
|
|
93
|
+
| PLAY0650 | W | C# bound-gate check: role needed by no invocation; opaque gates/implementation bodies suppress it |
|
|
94
|
+
| PLAY0651 | W | C# bound-gate check: declared actor definitely cannot satisfy gate; unknown is not denial |
|
|
95
|
+
| PLAY0652 | W/I | Opt-in `privilege`: trigger producer lacks every declared actor role (W), or has opaque gates that cannot be compared (I); clock/application triggers are silent |
|
|
96
|
+
| PLAY0504 | E | Missing/ambiguous stream, invalid/mismatched route parts, nominal source identifier/destination type mismatch or invalid stream-id literal; never a warning |
|
|
97
|
+
| PLAY0549 | E | Invalid specification route/mapping, including invalid stream-id literals |
|
|
98
|
+
|
|
99
|
+
Stream-id text must be nonempty, well-formed Unicode NFC: refuse, never normalize.
|
|
100
|
+
Integer ids in Double mode are within ±9007199254740991; Exact mode has no such
|
|
101
|
+
bound but remains unadmitted. Specification contradictions compare canonical ids,
|
|
102
|
+
so UUID casing does not distinguish routes. Composite encoding is ordered and
|
|
103
|
+
escapes `%`/`|`, not an inferred split of legacy text.
|
|
104
|
+
|
|
105
|
+
Identity declarations and event `subject` are metadata; reading a declared
|
|
106
|
+
`$identity` detail in executable clauses is PLAY0268. `runs as` is admitted as
|
|
107
|
+
ESM v10 in the current standalone, not a current PLAY0268 gap. Compliance markers
|
|
108
|
+
still block binding; purpose metadata is PLAY0270. See command-surface
|
|
109
|
+
`references/compliance.md` and `references/context.md` for syntax and limits.
|
|
110
|
+
|
|
111
|
+
`screenplay_repair_capabilities` and `propose-repair` advertise PLAY0653: a
|
|
112
|
+
concept-subject, line-only `PreserveTrivia` repair, no document-root or pinned
|
|
113
|
+
repair evidence. PLAY0565 supports one discovered `line` or a document-root
|
|
114
|
+
migration. Preview every repair; legal notes never move automatically.
|
|
115
|
+
|
|
116
|
+
## Specification metadata, callers, cases and locators
|
|
117
|
+
|
|
118
|
+
Authority: Screenplay v4.127.0 `diagnostics.md`, `specifications.md`, `slices.md`.
|
|
119
|
+
|
|
120
|
+
| Code | Severity | Meaning / fix |
|
|
121
|
+
| --- | --- | --- |
|
|
122
|
+
| PLAY0558 | E | Module/feature/slice/command/read-model/reaction documentation must be one nonempty fenced Markdown block; remove repeats or fix the fence. Events retain PLAY0477. |
|
|
123
|
+
| PLAY0559 | W | Conflicting module/feature documentation across files; first wins. Choose one owning text; identical copies are accepted. |
|
|
124
|
+
| PLAY0572 | E | Malformed/unknown persona caller or body lines; use a declared top-level persona with no body. |
|
|
125
|
+
| PLAY0573 | E (binding) | Persona synthesis refused (no policies, negation, required non-literal/role-URI claim, opaque or unresolved policy); inspect persona/policy/reason and use explicit `given caller`. |
|
|
126
|
+
| PLAY0574 | W | Opt-in `personas`: persona gates nothing. |
|
|
127
|
+
| PLAY0575 | W | Opt-in `personas`: gate denies every synthesized persona; unknown is not denial. |
|
|
128
|
+
| PLAY0576 | I | Opt-in `personas`: multiple unpinned buildable `or` alternatives; inspect chosen witness or pin a policy. |
|
|
129
|
+
| PLAY0577/0578 | E | Malformed parameter/case header; typed parameter has no body/default, case has a name and at most one inline assignment. |
|
|
130
|
+
| PLAY0579/0580 | E | Duplicate parameter/case name. |
|
|
131
|
+
| PLAY0581/0582 | E | Need parameters and cases; every case assigns each parameter exactly once, no extra names. |
|
|
132
|
+
| PLAY0583 | E | Case value is not concrete or cannot normalize to its type. |
|
|
133
|
+
| PLAY0584 | E | Unknown parameter or excluded reference position (callers/redelivery locators/clocks/names/nested literal members). |
|
|
134
|
+
| PLAY0585 | E | Optional parameter feeds required target. |
|
|
135
|
+
| PLAY0586 | E | Derived `<Specification>_<Case>` collides in scope. |
|
|
136
|
+
| PLAY0587 | E | Unknown or incompatible parameter/target type. |
|
|
137
|
+
| PLAY0588 | W | Unused parameter; remove it or use it intentionally. |
|
|
138
|
+
| PLAY0589 | E | Singular effective expansion cannot handle a table; use `ExpandAll`. |
|
|
139
|
+
| PLAY0526 | E | Route in command/read-model example; only event examples carry routes. Top-level `streamId = value` is payload. |
|
|
140
|
+
| PLAY0543 | E | Malformed redelivery or not exactly one definite match with no undecided candidate; narrow `for`, values, `stream` or `no stream`. |
|
|
141
|
+
| PLAY0548 | E | Route on `when <Command>` only; put it on the command declaration. Does not fire on redelivery locators. |
|
|
142
|
+
|
|
143
|
+
Descriptions/documentation are report-only PLAY0270, not executable conditions.
|
|
144
|
+
Case tables and persona callers expand before binding without a new ESM version.
|
|
145
|
+
Routes do not make redelivery executable: it still reports PLAY0268.
|
|
146
|
+
|
|
147
|
+
## Guarded interaction diagnostics
|
|
148
|
+
|
|
149
|
+
| Code | Severity | Meaning / fix |
|
|
150
|
+
| --- | --- | --- |
|
|
151
|
+
| PLAY0560 | E | Alternatives on a non-item trigger; only click/double click/select admit them. |
|
|
152
|
+
| PLAY0561 | E | Alternatives mixed with plain actions or `where`; choose one form. |
|
|
153
|
+
| PLAY0562 | E | Empty branch; supply a nonempty action list. |
|
|
154
|
+
| PLAY0563 | E | One-line labeled-action `when … execute …` in an interaction; use an indented list. C# offers a typed repair. |
|
|
155
|
+
| PLAY0564 | W/I | Item-trigger opaque `where` deprecated: a strict item condition warns with a C# repair to one `when`, no fallback; other text is information with no repair. Other triggers unchanged. |
|
|
156
|
+
|
|
157
|
+
PLAY0563/0564 repairs need individual review and canonical formatting, refuse
|
|
158
|
+
comment loss and do not support pinned evidence. TypeScript diagnoses but does
|
|
159
|
+
not offer these repairs. Preview through MCP `propose-repair`, never text-patch
|
|
160
|
+
around a refusal. Condition/subject errors also use guarded-action PLAY0341–0348.
|
|
161
|
+
|
|
49
162
|
## Structural completeness and timeline checks
|
|
50
163
|
|
|
51
164
|
Opt in with `--check <names>` or MCP diagnostics `checks`, then treat warnings
|
|
@@ -59,6 +172,9 @@ as errors if gating. Ordinary compile success does not imply these ran:
|
|
|
59
172
|
| query-keys | PLAY0535 | Query argument not representable by known identity/fields |
|
|
60
173
|
| event-consumers | PLAY0536 | Latest local event generation lacks an operational consumer; a terminal fact can legitimately be reported |
|
|
61
174
|
| navigation | PLAY0537 | Unreachable screens; unreachable cycles do not establish an entry point |
|
|
175
|
+
| privilege | PLAY0652 | Elevated event-trigger producers must require every actor role; opaque gates are information, clock/application triggers exempt |
|
|
176
|
+
| purposes | PLAY0602–0606 | Personal-data coverage, special/criminal safeguards, basis and unused-purpose prompts; union of ancestor/direct references |
|
|
177
|
+
| personas | PLAY0574–0576 | Unused personas, unreachable gates and ambiguous buildable policy alternatives; unsynthesizable/undecidable is unknown |
|
|
62
178
|
|
|
63
179
|
Whole-source errors skip completeness checks. Unknown/opaque coverage is not
|
|
64
180
|
invented: report skipped status/coverage and walk field lineage manually.
|
|
@@ -75,15 +191,18 @@ before a retained glob; cycles and own-sub-feature findings have no repair.
|
|
|
75
191
|
|
|
76
192
|
Monaco/VS Code use the TypeScript syntax/authoring compiler. They share projection
|
|
77
193
|
and protected-identifier checks (PLAY0514/0515), typed-example syntax (0518/0519),
|
|
78
|
-
guarded actions (0341–0348
|
|
194
|
+
guarded actions (0341–0348, including item paths/input bindings 0345–0348),
|
|
195
|
+
identity details (0633–0646), compliance/subject checks, reaction identity
|
|
196
|
+
(0647–0649), and reaction-refusal syntax/checks (0538–0545).
|
|
79
197
|
A shared catalog code is not proof that a check is implemented in both compilers.
|
|
80
198
|
|
|
81
199
|
C# CLI/MCP owns whole-application scoped diagnostics, opt-in completeness
|
|
82
|
-
(PLAY0530–0537
|
|
200
|
+
(including PLAY0530–0537, PLAY0602–0606 and PLAY0652), bound reaction gate
|
|
201
|
+
checks PLAY0650/0651, semantic binding and PLAY0546 (a negated claim targets optional,
|
|
83
202
|
unavailable-subject or non-text data). The VS Code repair bridge is not a general
|
|
84
203
|
C# validator. A clean editor is not V1 for the complete application, V3 binding
|
|
85
204
|
or V4 execution. Run the CLI or MCP for those verdicts. Authority:
|
|
86
|
-
`v4.
|
|
205
|
+
`v4.127.0:Documentation/screenplay/editor-diagnostics.md`, `diagnostics.md`.
|
|
87
206
|
|
|
88
207
|
## Consistency errors (V1: the model contradicts itself)
|
|
89
208
|
| Code | Meaning |
|
|
@@ -99,7 +218,7 @@ or V4 execution. Run the CLI or MCP for those verdicts. Authority:
|
|
|
99
218
|
## Binding (V2 and V3) - see `executable-subset.md` for the full table
|
|
100
219
|
| Code | Meaning | Fix |
|
|
101
220
|
|---|---|---|
|
|
102
|
-
| PLAY0268 | construct the ESM cannot represent; read the message for the construct (`executable-subset.md` lists the common ones: handler, list or observable query,
|
|
221
|
+
| PLAY0268 | construct the ESM cannot represent; read the message for the construct (`executable-subset.md` lists the common ones: handler, list or observable query, `pii`, `produces when` over read models, v6 constructs on cratis before 3.28.2) | stay in design mode, or change the construct if the domain allows; never strip `pii`/authorization |
|
|
103
222
|
| PLAY0269 / 0270 | UI deferred / authoring metadata (I) | none |
|
|
104
223
|
| PLAY0271 | legacy `reads` or a `concurrency` block keeps its legacy meaning and cannot bind (error) | design gap; a constraint for uniqueness; protected decisions are a target requirement |
|
|
105
224
|
| PLAY0273 | incoherent: ambiguous `for`, property not on event revision, operand type mismatch, derived `$eventContext` path | fix the reference |
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
# Documentation contradictions and which side to trust
|
|
2
2
|
|
|
3
|
-
Current pins are Screenplay 4.
|
|
3
|
+
Current pins are Screenplay 4.127.0 / CLI 3.41.0 (`versions.md`). This is a
|
|
4
4
|
**historical** contradiction inventory, not a claim that all listed defects still
|
|
5
5
|
exist. Current grammar documents exact numbers and free description placement;
|
|
6
6
|
sources/routes bind as ESM v8; PLAY0515 is a source error; CLI v7 reaches Stage.
|
|
7
7
|
|
|
8
|
+
At v4.127.0 `concepts.md` links the shipped purpose declarations/checks/record
|
|
9
|
+
but its final identifier section still calls them later phases. `purposes.md`,
|
|
10
|
+
the released grammar/tool and successful purpose probes take precedence. The same
|
|
11
|
+
page's legacy `@pii` mentions do not change bare `pii`/`secret` canonical syntax;
|
|
12
|
+
legacy forms compile with PLAY0565 information, duplicates with PLAY0653 warning.
|
|
13
|
+
Event `subject` remains report-only, despite accepted future lineage work.
|
|
14
|
+
|
|
8
15
|
`D/` is Screenplay `Documentation/screenplay/` at **v4.66.0**; line numbers were re-read at
|
|
9
16
|
that tag. Rule: the compiler you ran decides what the tool accepts today; the documentation
|
|
10
17
|
and the domain decide what the model should mean. When they disagree, follow the compiler
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Contents
|
|
4
4
|
|
|
5
|
+
- Caller and compliance boundary (4.127.0)
|
|
5
6
|
- Admitted on both compilers
|
|
6
7
|
- Admitted from Screenplay 4.61 (ESM v6): standalone tool and cratis 3.28.2 or later
|
|
7
8
|
- Generated values and responses (ESM v7): standalone 4.68.0 or later only
|
|
@@ -10,7 +11,7 @@
|
|
|
10
11
|
- Not refused, but do not rely on it
|
|
11
12
|
- Never do this to reach V3
|
|
12
13
|
|
|
13
|
-
Current pins are Screenplay 4.
|
|
14
|
+
Current pins are Screenplay 4.127.0 / CLI 3.41.0 (`versions.md`). Detailed
|
|
14
15
|
4.66.0/4.68.0 binder probes below retain their historical labels. Current source
|
|
15
16
|
admits sources/streams/routes as ESM v8 and policy negation as ESM v7; operations,
|
|
16
17
|
exact numbers and reaction refusals/redelivery remain unadmitted. Use the actual
|
|
@@ -32,6 +33,20 @@ Complete examples that bind live in `executable-example.md` (both compilers),
|
|
|
32
33
|
(ESM v6; standalone tool and cratis 3.28.2 or later) and `generated-responses-example.md`
|
|
33
34
|
(ESM v7; standalone tool 4.68.0 or later only).
|
|
34
35
|
|
|
36
|
+
## Caller and compliance boundary (4.127.0)
|
|
37
|
+
|
|
38
|
+
`$identity.id`/`.name`/`.userName` are aliases of the admitted
|
|
39
|
+
`$context.identity` produces-mapping values. Authentication status, roles and
|
|
40
|
+
claims still refuse there (PLAY0268); the older root is not deprecated.
|
|
41
|
+
A top-level `identity` block alone is authoring metadata and does not block
|
|
42
|
+
readiness. Executable reads of declared `$identity.<detail>` do (PLAY0268);
|
|
43
|
+
`$context.identity` remains built-ins only. Purposes and event `subject` marks
|
|
44
|
+
are metadata (PLAY0270), not source resolution, retention or subject propagation.
|
|
45
|
+
Bare `pii`/`personal` and `secret` concepts, scopes and qualifiers still block
|
|
46
|
+
binding. Legacy spellings compile with PLAY0565 information; duplicates warn
|
|
47
|
+
PLAY0653. Never remove protection; see command-surface `references/compliance.md`.
|
|
48
|
+
Authority: v4.127.0 `context.md`, `identity.md`, `concepts.md`, `events.md`, `purposes.md`.
|
|
49
|
+
|
|
35
50
|
## Admitted on both compilers
|
|
36
51
|
|
|
37
52
|
- `StateChange` and `StateView` slices.
|
|
@@ -159,7 +174,7 @@ bodies still leave their owner non-executable.
|
|
|
159
174
|
| --- | --- | --- |
|
|
160
175
|
| `Automation` or `Translate` slice, `reaction`, `capture`, `trigger`; `given clock`, `when clock`, `when trigger`, `when capture` | PLAY0268 | **cratis before 3.28.2 bundles only** (4.60.1); messages in `versions.md` |
|
|
161
176
|
| Unquoted `import Other.Contract` | PLAY0268 | external contract import is not bound |
|
|
162
|
-
|
|
|
177
|
+
| `pii` or `secret` on any concept (also alias/legacy markers) | PLAY0268 | Compliance requires portable data-subject semantics; scopes/qualifiers do not admit it. Secret provider mapping is `[Encrypted]` + `[NotAudited]`, not a bind/render claim |
|
|
163
178
|
| `query` returning a collection (`RM[]`), or without exactly one caller-supplied `by` | PLAY0268 | "must declare one caller-supplied 'by' argument" or "must return one optional read model" |
|
|
164
179
|
| `observable`, `filter`, `scoped to`, `performer` queries | PLAY0268 | "uses delivery, filtering, scope, or implementation behavior outside the first ESM v1 vertical." `observable` goes in the return position (`=> observable RM optional`); as a body line it is PLAY0048 |
|
|
165
180
|
| `contains` or `starts with` in conditions | PLAY0268 | equality and numeric ordering only |
|
|
@@ -199,9 +214,9 @@ bodies still leave their owner non-executable.
|
|
|
199
214
|
|
|
200
215
|
## Never do this to reach V3
|
|
201
216
|
|
|
202
|
-
Do not remove
|
|
217
|
+
Do not remove `pii`, `secret`, `authorize` or policies, list queries, automations or
|
|
203
218
|
rules a domain needs just to make binding pass. Report `V3 blocked: <codes>` and record the
|
|
204
|
-
slice in the gap list. A
|
|
219
|
+
slice in the gap list. A `pii` or `secret` marker blocks V3 and rendering, and
|
|
205
220
|
either attribute on an identifier or typed destination is a source error
|
|
206
221
|
PLAY0515 on the current compiler (including stream-id parts and route mapping
|
|
207
222
|
sources). Chronicle also rejects `[PII]`/`[Encrypted]` on event-source identifiers
|
|
@@ -28,7 +28,13 @@ is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
|
28
28
|
|
|
29
29
|
## Sources read for facts
|
|
30
30
|
|
|
31
|
-
-
|
|
31
|
+
- Identity/compliance/route-literal guidance: Screenplay `v4.127.0` (`e70435a4`)
|
|
32
|
+
`identity.md`, `context.md`, `concepts.md`, `purposes.md`, `events.md`,
|
|
33
|
+
`event-sources.md`, `reactions.md`, `completeness.md`, `diagnostics.md`,
|
|
34
|
+
`editor-diagnostics.md`, MCP reference/authoring tools and `Semantics/Versions.cs`.
|
|
35
|
+
Installed 4.127.0 version and changed examples were checked separately. Historical
|
|
36
|
+
execution and renderer probes retain their labels; CLI stays 3.41.0.
|
|
37
|
+
- Earlier baseline: Screenplay `v4.125.0` `Documentation/screenplay/{tool,diagnostics,editor-diagnostics,grammar,event-sources,specifications,policies}.md`, MCP reference/authoring guides and `Semantics/Versions.cs`; CLI `v3.41.0` dependency pins, `RenderedSemanticVersions.cs` and its v7 planning specification. Installed versions/CLI help and changed examples were checked separately. Pins are in `versions.md`; the older probes below retain their original labels.
|
|
32
38
|
- Screenplay `v4.66.0` (`c89198b`): `Documentation/screenplay/` (grammar, commands, queries,
|
|
33
39
|
specifications, reactions, diagnostics, mcp), `decisions/0017`, `0020`, `0022` to `0024`,
|
|
34
40
|
`Source/DotNET/Screenplay/Semantics/` (binder, versions, execution),
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# Renderable subset (V5): what `cratis render` admits
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- What Stage 4.24 admits
|
|
6
|
+
- Authoring consequences in renderable mode
|
|
7
|
+
- Ownership, publication and recovery
|
|
8
|
+
- Reading V5
|
|
9
|
+
|
|
10
|
+
Current pins: standalone Screenplay 4.127.0; CLI 3.41.0 bundles Screenplay
|
|
4
11
|
4.114.0 and Stage 4.51.3 (`versions.md`). CLI admits ESM v7 to Stage planning;
|
|
5
12
|
above v7 is CLI-RENDER-004. Its v7 canonical corpus gets STAGE-ESM-028/029 for
|
|
6
13
|
generated values/responses (`v3.41.0:Source/Cli.Specs/for_ScreenplayPlanning/when_planning_an_esm_v7_model.cs`).
|
|
@@ -48,6 +55,14 @@ whole automation is hand-written (gap-fill).
|
|
|
48
55
|
| Specifications | command-action scenarios: given events, `when <Command>`, `then` events (ordered or any order), `then readmodel`, `then query`, `then error` (naming a rendered constraint or message), `then denied`, `given caller`. Two narrow when-less routes: an unprotected single `then query` seeded by exactly one `given readmodel` whose key and values match (no given events, no caller), and a query-only denial (`given caller`, one `then query` with no results, `then denied`, a protected query, no role claims) | `then no readmodel`, `when append`, composite values, error codes not naming a rendered constraint: 011. Any other when-less specification (for example given events with `then query`) fails 011 |
|
|
49
56
|
| Compliance | none | any `@pii` or `@sensitive` already fails binding (PLAY0268). The C# provider mapping (Stage v4.29.0, Stage#197) is `@pii` to `[PII]`, `@sensitive` to `[Encrypted]` + `[NotAudited]`, both to `[PII]` only |
|
|
50
57
|
|
|
58
|
+
At standalone 4.127.0, compliance uses bare `pii`/`secret` (legacy markers are
|
|
59
|
+
accepted with PLAY0565 information); either still refuses binding. Identity blocks,
|
|
60
|
+
purposes and event `subject` are authoring metadata, not provider realization;
|
|
61
|
+
executing identity detail reads still refuses PLAY0268. Current source/stream
|
|
62
|
+
routes are admitted as v8, including composite ids, not the historical binding
|
|
63
|
+
refusal above; CLI 3.41.0 still refuses versions above v7. Never split hand-joined
|
|
64
|
+
legacy ids or drop protected ids into routing to fit a renderer (PLAY0515).
|
|
65
|
+
|
|
51
66
|
## Authoring consequences in renderable mode
|
|
52
67
|
|
|
53
68
|
- `produces when` is STAGE-ESM-006: split conditional outcomes into separate commands, or
|
|
@@ -81,9 +96,12 @@ whole automation is hand-written (gap-fill).
|
|
|
81
96
|
`Customizations/styles.css`. The planner never reads it, and it never binds a modeled
|
|
82
97
|
reaction or capture. A customization never makes a rejected model renderable.
|
|
83
98
|
- `cratis render` does **not** build, test or run the application.
|
|
84
|
-
-
|
|
85
|
-
app (Components 4.14.0, Scene 4.
|
|
86
|
-
|
|
99
|
+
- Stage 4.51.3's scaffold pins .NET 10, Arc 22.50.5, Chronicle client/kernel 19.32.0
|
|
100
|
+
and emits a `.frontend/` React/Vite app (Components 4.14.0, Scene 4.10.0).
|
|
101
|
+
`CratisEmbeddedScreenplayEnabled=false`; `Directory.Packages.props` is managed,
|
|
102
|
+
never edit it. `[ProtectedDecision]` / `DecisionRead<T>` are available to gap-fill,
|
|
103
|
+
not Stage-emitted enforcement; projection/key admission and unit-of-work enrollment
|
|
104
|
+
remain required. Source checks: Stage skill `references/rendered-application.md`.
|
|
87
105
|
|
|
88
106
|
## Reading V5
|
|
89
107
|
|