@cratis/pi 7.82.0 → 7.83.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/corpus/product-sync.json +3 -3
- package/package/corpus/skills/cratis-screenplay-command-surface/references/inline-events.md +3 -2
- package/package/corpus/skills/cratis-screenplay-command-surface/references/routes-and-external-operations.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/destination-intent-repair.md +107 -0
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +7 -3
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +9 -7
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/repairs.md +3 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/view-and-story-specs.md +2 -2
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +2 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +1 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-id-rules.md +3 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +4 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +6 -5
- package/package/corpus/skills/cratis-screenplay-toolchain/references/pdl-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +205 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +4 -3
- package/package.json +1 -1
|
@@ -171,9 +171,9 @@
|
|
|
171
171
|
}
|
|
172
172
|
],
|
|
173
173
|
"synced": {
|
|
174
|
-
"version": "4.
|
|
174
|
+
"version": "4.216.0",
|
|
175
175
|
"date": "2026-10-18",
|
|
176
|
-
"by": "Cratis/AI#
|
|
176
|
+
"by": "Cratis/AI#784"
|
|
177
177
|
},
|
|
178
178
|
"covers": {
|
|
179
179
|
"skills": [
|
|
@@ -201,7 +201,7 @@
|
|
|
201
201
|
],
|
|
202
202
|
"rules": []
|
|
203
203
|
},
|
|
204
|
-
"notes": "Cratis/AI#771: standalone Screenplay 4.213.0 pinned; regenerated compiler contract is byte-identical to the v4.213.0 release asset and unchanged from 4.212.4. Reviewed the full v4.212.4-v4.213.0 delta against tagged decision 0093 and MCP reference: pre-binding container identities and stable binding/migration continuity, own-slice member substitutions, containerIdentities completeness/ambiguity/collision refusals, retained ambiguous notes, explicit semanticRenames/retirements, binding fixes through MCP, exact reopen exception, notes/identity rollback and exact-ID re-add anchoring. No grammar, binder, ESM or diagnostic-code changes; no new render/runtime probe. Prior: Cratis/AI#772: standalone Screenplay 4.212.4 pinned; regenerated compiler contract is byte-identical to the v4.212.4 release asset. Source-checked joined-event automap/no automap overrides and level fallback in executable binding; PLAY0380 covers only all inside children/nested. No new render/runtime probe. Prior: Cratis/AI#769: standalone Screenplay 4.212.3 pinned; regenerated compiler contract is byte-identical to the v4.212.3 release asset. Source-checked both compilers and projection documentation for PLAY0801 DuplicateEventInProjectionScope: shared from/removal/clear set, separate join set, fresh sets per children/nested/variant level, and no two-row update through repeated from blocks with different keys. No new render/runtime probe. Prior: Cratis/AI#768: standalone Screenplay 4.212.2 pinned; regenerated compiler contract is byte-identical to the v4.212.2 release asset (unchanged from the previous contract). Source-checked v4.212.0 split-model dotted note targets, open-workspace applicationIdentity and complete add/reanchor substitutions; unbound container identities are not claimed. v4.212.1 aligns PLAY0535 collection fields, optional parameters and single-result identity inference. v4.212.2 counts read-only query denials for SPEC004, not SPEC006. No new render/runtime probe. Prior: Cratis/AI#762 and #761: source-checked v4.210.0 and v4.211.0 contracts for PLAY0800 CommandHandlerRequiresAttachment (required typed subject, permanent code-attachment requirement, other PLAY0268 families unchanged), independent reference remove/add batches, located same-text ambiguity conflicts and string MCP conflict/move-report document fields. v4.211.1 mapping changes inspected but excluded from this guidance update at the user's request; no typed PLAY0273 property/type arguments are claimed. Standalone Screenplay 4.211.1 and its compiler contract pinned; the contract is a byte-identical copy of the v4.211.1 release asset. No new render/runtime probe. Prior: Standalone 4.205.0 and byte-identical compiler contract pinned. Cratis/AI#746: Uuid ==/!= in command require and produces when (ESM v28): same-concept rule, bare Uuid against a concept, canonical literals, protected read paths in require only; PLAY0268 (different concepts, ordering, Uuid validation and concept rules, read paths in produces when) and PLAY0273 (non-canonical literal) checked against the 4.205.0 compiler, v28 selection read from the MCP executable-model view; Stage admits exact v1-v21 and v23-v26 pairs so v28 is refused STAGE-ESM-016, not probed against a Stage image; CLI 3.74.0 renders through v26. Prior: Standalone 4.204.0 and byte-identical compiler contract pinned. Cratis/AI#702 and #691: PLAY0690 reducer identity (Screenplay 4.170.0, native compiler only) and the screenplay.json validation gate (Screenplay 4.165.0; cratis screenplay validate reads it from CLI 3.65.0) are taught and probed against the 4.204.0 compiler. Cratis/AI#743: flat composite read-model keys (ESM v27): untyped projection key blocks on root from and remove with, equality-filter lists, single-instance by blocks and per-part fixtures, with PLAY0661/PLAY0662/PLAY0268 refusals checked against the 4.204.0 compiler; Stage origin/main still refuses v27 with STAGE-ESM-016 (stage-rendering.md); Stage v4.135.0 v26 admission (Host and executor run date comparisons; renderer STAGE-ESM-046) was source-checked for this sync; no render or runtime probe. Prior: Standalone 4.201.0 and byte-identical compiler contract pinned. Cratis/AI#733: the ui profile root template, shell options, appearance and new screens default (PLAY0788-PLAY0799, quick fix for the legacy layout line, ui-profiles MCP tool, 44 tools). Cratis/AI#735: chronological Date/DateTime ordering in command conditions and command/property literal validation (ESM v26), UTC tick precision and pre-rule offset validation; then matching remains ordinal. Source-checked Screenplay v4.199.0 commands, diagnostics, interoperability and specifications documentation plus decision 0087. Stage v4.127.1 still refuses v26 with STAGE-ESM-016 (stage-rendering.md and SemanticVersionFeatures.Supports); no render/runtime probe. Cratis/AI#576: prior mechanical compiler catch-up. Language batch #717/#722/#723/#724/#720/#728/#734 teaches atomic reaction batches (v22), described payload handlers (v23), portable linear matching, ordinal text rules (v24), protected command reads (v25), diagnostic arguments and event-source invokes mappings. Facts read at Screenplay v4.198.0 and introducing tags; Stage v4.127.0 admits exact v1-v21 and v23-v25 pairs but refuses v22/v26 and mixed pairs (STAGE-ESM-016), protected reads (044), atomic mode (043) and described handlers (STAGE-IMPL-002), even Stub mode. Stage text rules execute/render; no new renderer/runtime probe or Stage pin uplift. Cratis/AI#706: application navigation regions (module inherit, extend or override), toolbar slice buttons, blueprint template references and sample data packs in cratis-screenplay-ui-composition (references/application-shell.md), with the canonical shell vector and the rejection codes PLAY0710-PLAY0722 and PLAY0740-PLAY0765. Examples moved to the executable-state rules since 4.164: translator reactions in an Automation slice beside the Translate slice (PLAY0694) and the first record of a capture key appended with `when added`. Earlier: Standalone 4.164.0 and byte-identical compiler contract pinned. Cratis/AI#663: one origin per capture (PLAY0687). #668: executable no-event/redelivery v17. #684: concept query-argument validation in every version and query-error assertions v18. #681: executable refusal branches and refusal values v19. #666: proposal summary/severity counts and exact structural source proposals. Generated-concept rules select v20 with PLAY0688/0689 proofs and derived-matches repair; generated secrets and preview strategies remain refused. Release-baseline from-esm admission reads storedName. Standalone binding is not renderer admission: Stage 4.103.0 admits v1-v17 and v19; CLI 3.62.0 bundles Screenplay 4.159.0 / Stage 4.99.0 and renders through v16. Prior evidence remains unless superseded; no new renderer, Docker or browser probe."
|
|
204
|
+
"notes": "Cratis/AI#779: reference-runner capability refusals taught as scoped per specification (introduced in v4.213.2, Cratis/Screenplay#897) from the v4.216.0 tool and MCP documentation and plan source: an unadmitted projection (UnsupportedEventContext, UnsupportedProjectionBlock) marks unsupported only the specifications that reach it or its read model, the others run and planIssues lists deferred issues; application-level issues still block every selected specification; no new render/runtime probe. Prior: Cratis/AI#776: PLAY0802 ReservedStoredName (introduced in v4.213.3, Cratis/Screenplay#893) taught from the v4.216.0 compilers and documentation: stored event source `Default` and stored event stream `All` (ordinal, name or `id` pin) refused at authoring time, a pin away from the reserved name valid, PLAY0273 kept as the binding backstop; no new render/runtime probe. Prior: Cratis/AI#784: standalone Screenplay 4.216.0 pinned; compiler contract replaced by the v4.216.0 release asset (adds the propose-repair destinationIntent v1 schema and PLAY0802 ReservedStoredName). Source-checked decision 0096 and the MCP reference for the explicit author-intent PLAY0470 repair: repair-intents discovery, intentActions feature detection, complete per-production selections, retained production-destination report and identity views, explicit apply and refusals. No new render/runtime probe. Prior: Cratis/AI#771: standalone Screenplay 4.213.0 pinned; regenerated compiler contract is byte-identical to the v4.213.0 release asset and unchanged from 4.212.4. Reviewed the full v4.212.4-v4.213.0 delta against tagged decision 0093 and MCP reference: pre-binding container identities and stable binding/migration continuity, own-slice member substitutions, containerIdentities completeness/ambiguity/collision refusals, retained ambiguous notes, explicit semanticRenames/retirements, binding fixes through MCP, exact reopen exception, notes/identity rollback and exact-ID re-add anchoring. No grammar, binder, ESM or diagnostic-code changes; no new render/runtime probe. Prior: Cratis/AI#772: standalone Screenplay 4.212.4 pinned; regenerated compiler contract is byte-identical to the v4.212.4 release asset. Source-checked joined-event automap/no automap overrides and level fallback in executable binding; PLAY0380 covers only all inside children/nested. No new render/runtime probe. Prior: Cratis/AI#769: standalone Screenplay 4.212.3 pinned; regenerated compiler contract is byte-identical to the v4.212.3 release asset. Source-checked both compilers and projection documentation for PLAY0801 DuplicateEventInProjectionScope: shared from/removal/clear set, separate join set, fresh sets per children/nested/variant level, and no two-row update through repeated from blocks with different keys. No new render/runtime probe. Prior: Cratis/AI#768: standalone Screenplay 4.212.2 pinned; regenerated compiler contract is byte-identical to the v4.212.2 release asset (unchanged from the previous contract). Source-checked v4.212.0 split-model dotted note targets, open-workspace applicationIdentity and complete add/reanchor substitutions; unbound container identities are not claimed. v4.212.1 aligns PLAY0535 collection fields, optional parameters and single-result identity inference. v4.212.2 counts read-only query denials for SPEC004, not SPEC006. No new render/runtime probe. Prior: Cratis/AI#762 and #761: source-checked v4.210.0 and v4.211.0 contracts for PLAY0800 CommandHandlerRequiresAttachment (required typed subject, permanent code-attachment requirement, other PLAY0268 families unchanged), independent reference remove/add batches, located same-text ambiguity conflicts and string MCP conflict/move-report document fields. v4.211.1 mapping changes inspected but excluded from this guidance update at the user's request; no typed PLAY0273 property/type arguments are claimed. Standalone Screenplay 4.211.1 and its compiler contract pinned; the contract is a byte-identical copy of the v4.211.1 release asset. No new render/runtime probe. Prior: Standalone 4.205.0 and byte-identical compiler contract pinned. Cratis/AI#746: Uuid ==/!= in command require and produces when (ESM v28): same-concept rule, bare Uuid against a concept, canonical literals, protected read paths in require only; PLAY0268 (different concepts, ordering, Uuid validation and concept rules, read paths in produces when) and PLAY0273 (non-canonical literal) checked against the 4.205.0 compiler, v28 selection read from the MCP executable-model view; Stage admits exact v1-v21 and v23-v26 pairs so v28 is refused STAGE-ESM-016, not probed against a Stage image; CLI 3.74.0 renders through v26. Prior: Standalone 4.204.0 and byte-identical compiler contract pinned. Cratis/AI#702 and #691: PLAY0690 reducer identity (Screenplay 4.170.0, native compiler only) and the screenplay.json validation gate (Screenplay 4.165.0; cratis screenplay validate reads it from CLI 3.65.0) are taught and probed against the 4.204.0 compiler. Cratis/AI#743: flat composite read-model keys (ESM v27): untyped projection key blocks on root from and remove with, equality-filter lists, single-instance by blocks and per-part fixtures, with PLAY0661/PLAY0662/PLAY0268 refusals checked against the 4.204.0 compiler; Stage origin/main still refuses v27 with STAGE-ESM-016 (stage-rendering.md); Stage v4.135.0 v26 admission (Host and executor run date comparisons; renderer STAGE-ESM-046) was source-checked for this sync; no render or runtime probe. Prior: Standalone 4.201.0 and byte-identical compiler contract pinned. Cratis/AI#733: the ui profile root template, shell options, appearance and new screens default (PLAY0788-PLAY0799, quick fix for the legacy layout line, ui-profiles MCP tool, 44 tools). Cratis/AI#735: chronological Date/DateTime ordering in command conditions and command/property literal validation (ESM v26), UTC tick precision and pre-rule offset validation; then matching remains ordinal. Source-checked Screenplay v4.199.0 commands, diagnostics, interoperability and specifications documentation plus decision 0087. Stage v4.127.1 still refuses v26 with STAGE-ESM-016 (stage-rendering.md and SemanticVersionFeatures.Supports); no render/runtime probe. Cratis/AI#576: prior mechanical compiler catch-up. Language batch #717/#722/#723/#724/#720/#728/#734 teaches atomic reaction batches (v22), described payload handlers (v23), portable linear matching, ordinal text rules (v24), protected command reads (v25), diagnostic arguments and event-source invokes mappings. Facts read at Screenplay v4.198.0 and introducing tags; Stage v4.127.0 admits exact v1-v21 and v23-v25 pairs but refuses v22/v26 and mixed pairs (STAGE-ESM-016), protected reads (044), atomic mode (043) and described handlers (STAGE-IMPL-002), even Stub mode. Stage text rules execute/render; no new renderer/runtime probe or Stage pin uplift. Cratis/AI#706: application navigation regions (module inherit, extend or override), toolbar slice buttons, blueprint template references and sample data packs in cratis-screenplay-ui-composition (references/application-shell.md), with the canonical shell vector and the rejection codes PLAY0710-PLAY0722 and PLAY0740-PLAY0765. Examples moved to the executable-state rules since 4.164: translator reactions in an Automation slice beside the Translate slice (PLAY0694) and the first record of a capture key appended with `when added`. Earlier: Standalone 4.164.0 and byte-identical compiler contract pinned. Cratis/AI#663: one origin per capture (PLAY0687). #668: executable no-event/redelivery v17. #684: concept query-argument validation in every version and query-error assertions v18. #681: executable refusal branches and refusal values v19. #666: proposal summary/severity counts and exact structural source proposals. Generated-concept rules select v20 with PLAY0688/0689 proofs and derived-matches repair; generated secrets and preview strategies remain refused. Release-baseline from-esm admission reads storedName. Standalone binding is not renderer admission: Stage 4.103.0 admits v1-v17 and v19; CLI 3.62.0 bundles Screenplay 4.159.0 / Stage 4.99.0 and renders through v16. Prior evidence remains unless superseded; no new renderer, Docker or browser probe."
|
|
205
205
|
},
|
|
206
206
|
{
|
|
207
207
|
"id": "scene",
|
|
@@ -34,8 +34,9 @@ module Projects
|
|
|
34
34
|
The omitted `for` means the command's required scalar identifier **only for
|
|
35
35
|
inline productions**, when every production targets that same source. Once a
|
|
36
36
|
production targets another source, every production must state `for`. Mixing
|
|
37
|
-
omitted inline and plain destinations also fails (`PLAY0470`);
|
|
38
|
-
|
|
37
|
+
omitted inline and plain destinations also fails (`PLAY0470`); the MCP repair needs an explicit
|
|
38
|
+
author-chosen destination per production and never retargets an explicit one (see the
|
|
39
|
+
model-authoring skill's `references/destination-intent-repair.md`). Explicit syntax does not make cross-source
|
|
39
40
|
execution supported.
|
|
40
41
|
|
|
41
42
|
Plain `produces X` references a declared event; omitting `for` does not infer
|
|
@@ -7,7 +7,7 @@ This reference holds the route, public-event and external-operation guidance for
|
|
|
7
7
|
Routes bind as ESM v8; production `stream Source.Stream` overrides
|
|
8
8
|
select v10. Read toolchain [routes](../../cratis-screenplay-toolchain/references/production-routes-and-filters.md)
|
|
9
9
|
and [source/stream declarations](../../cratis-screenplay-toolchain/references/sources-and-streams.md).
|
|
10
|
-
A stored stream `All` / `id "All"`
|
|
10
|
+
A stored stream `All` / `id "All"` and a stored source `Default` refuse PLAY0802 (PLAY0273 at binding as a backstop);
|
|
11
11
|
rename and history-migration guidance is in that reference.
|
|
12
12
|
`public event X` is a local export; `event X from "store"` is a locally declared,
|
|
13
13
|
unverified foreign shape. Commands never produce public events. Read
|
|
@@ -175,7 +175,7 @@ Choose formatting and disclose dropped comments before apply:
|
|
|
175
175
|
|
|
176
176
|
## Repair or extract before rewriting
|
|
177
177
|
|
|
178
|
-
Read `read-workspace` with `view: "repairs"` at the same revision as diagnostics and pass the repair to `propose-repair`; use `propose-extract-inline-event` before adding generations. `PLAY0469` changes the event contract, so ask about stored contracts first. No automatic generation-evolution repair ships. `PLAY0479`: migrate optionality spelling with `PreserveTrivia`. `eventNeverPersisted: true` cannot unfreeze admitted revisions. Differing event pins carry `storedName` in ESM v16, shared by all generations and unique (PLAY0472). Read [references/repairs.md](references/repairs.md) when fixing `PLAY0166`, `PLAY0478`, `PLAY0516` or `PLAY0683`, or admitting a [release baseline](references/release-baseline.md).
|
|
178
|
+
Read `read-workspace` with `view: "repairs"` at the same revision as diagnostics and pass the repair to `propose-repair`; use `propose-extract-inline-event` before adding generations. `PLAY0469` changes the event contract, so ask about stored contracts first. No automatic generation-evolution repair ships. `PLAY0479`: migrate optionality spelling with `PreserveTrivia`. `eventNeverPersisted: true` cannot unfreeze admitted revisions. Differing event pins carry `storedName` in ESM v16, shared by all generations and unique (PLAY0472). Read [references/repairs.md](references/repairs.md) when fixing `PLAY0166`, `PLAY0478`, `PLAY0516` or `PLAY0683`, or admitting a [release baseline](references/release-baseline.md). Read [references/destination-intent-repair.md](references/destination-intent-repair.md) when `PLAY0470` needs a repair.
|
|
179
179
|
|
|
180
180
|
## Choose a readable layout
|
|
181
181
|
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Establishing production destinations (PLAY0470)
|
|
2
|
+
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- Detect and discover
|
|
6
|
+
- Request
|
|
7
|
+
- Rules
|
|
8
|
+
- Review and apply
|
|
9
|
+
- Refusals and failures
|
|
10
|
+
|
|
11
|
+
Requires Screenplay 4.216.0 (`screenplay --version`); older servers offer no PLAY0470 repair, so
|
|
12
|
+
the author edits each `for` by hand.
|
|
13
|
+
|
|
14
|
+
`PLAY0470` is an error when a command targets another event source and a production omits `for`,
|
|
15
|
+
or when omitted inline and plain productions have different defaults. The repair needs the author's
|
|
16
|
+
explicit choice of every destination; the server never infers one. It is never in the no-input
|
|
17
|
+
`actions` list of `repair-capabilities`.
|
|
18
|
+
|
|
19
|
+
## Detect and discover
|
|
20
|
+
|
|
21
|
+
1. Feature-detect an entry in `repair-capabilities.intentActions` with `diagnosticCode: "PLAY0470"`.
|
|
22
|
+
It names the tool (`propose-repair`), the intent schema (`destinationIntent`, version 1), the
|
|
23
|
+
discovery view (`repair-intents`) and the report view (`production-destinations`). Absent entry:
|
|
24
|
+
the server cannot repair `PLAY0470`; edit through a reviewed `propose-ast` instead.
|
|
25
|
+
2. `read-workspace` with `view: "repair-intents"` and `expectedRevision`. The response carries
|
|
26
|
+
`expressionSchema` (`syntax-schema:ExpressionSyntax`) and a `page`. Each item has `command`,
|
|
27
|
+
`diagnostics`, `subject` (the production occurrence handle), `event`, `condition`, `existingFor`,
|
|
28
|
+
`authoredRoute`, `effectiveRoute` and `route` (`null` when ambiguous).
|
|
29
|
+
3. Page with `offset` (default 0) and `limit` (1 to 200, default 50) until `nextOffset` is `null`.
|
|
30
|
+
Pass `expectedCatalogRevision` on continuation pages. A row too large for a page refuses with
|
|
31
|
+
`LimitExceeded` and is never truncated.
|
|
32
|
+
|
|
33
|
+
## Request
|
|
34
|
+
|
|
35
|
+
Handles are `{revision, documentId, path}` objects: reuse discovered ones exactly. Every value in
|
|
36
|
+
angle brackets below is a placeholder, not literal JSON.
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"expectedRevision": "<workspace revision>",
|
|
41
|
+
"expectedCatalogRevision": "<catalog revision>",
|
|
42
|
+
"diagnosticCode": "PLAY0470",
|
|
43
|
+
"subject": "<command handle>",
|
|
44
|
+
"formatting": "CanonicalizeTouchedDocuments",
|
|
45
|
+
"destinationIntent": {
|
|
46
|
+
"version": 1,
|
|
47
|
+
"productions": [
|
|
48
|
+
{
|
|
49
|
+
"subject": "<production occurrence handle>",
|
|
50
|
+
"for": "<typed expression object from syntax-schema>",
|
|
51
|
+
"route": { "kind": "Legacy" }
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
A named route is `{ "kind": "Named", "source": <declaration handle>, "stream": <declaration handle> }`;
|
|
59
|
+
both handles are required, and `Legacy` takes neither.
|
|
60
|
+
|
|
61
|
+
## Rules
|
|
62
|
+
|
|
63
|
+
- Give exactly one selection per event-production occurrence, including repeated events, conditional
|
|
64
|
+
productions and productions that already state `for`. An incomplete, duplicate, stale or foreign
|
|
65
|
+
selection refuses the whole request.
|
|
66
|
+
- `for` is a typed expression object obtained from `syntax-schema`; never invent its shape and never
|
|
67
|
+
guess an identifier. Choose each destination with the author.
|
|
68
|
+
- Confirm the route per selection as `Legacy` or `Named` with the exact source and stream handles.
|
|
69
|
+
- `formatting: "CanonicalizeTouchedDocuments"` is required. The server forces `Executable`
|
|
70
|
+
validation, so send no `validation` argument. Send no `pinRepairEvidence` and no
|
|
71
|
+
`expectedRepairEvidenceRevision`.
|
|
72
|
+
- Every missing `for` changes together in one transaction. A repair never retargets an explicit
|
|
73
|
+
destination or route; already-explicit selections must match what is authored.
|
|
74
|
+
- The whole workspace must bind. There is no fix-all, no inferred destination and no applyable subset.
|
|
75
|
+
- The repair claims neither preservation nor an executable baseline, including for other commands.
|
|
76
|
+
Binding proves neither business correctness nor target execution support.
|
|
77
|
+
|
|
78
|
+
## Review and apply
|
|
79
|
+
|
|
80
|
+
`propose-repair` retains a proposal and writes nothing. Both report views page like discovery
|
|
81
|
+
(`offset`, `limit` 1 to 200); read each until `page.nextOffset` is `null`, because a first page can
|
|
82
|
+
hide routing rows or new identities. Before `apply`:
|
|
83
|
+
|
|
84
|
+
1. `read-proposal` with `proposalId` and `view: "production-destinations"`: the `summary`
|
|
85
|
+
(`changedCount`, `productionCount`, `commandRoute`, `existingIdentitiesPreserved`) and one row per
|
|
86
|
+
production with `original`, `selectedFor`, `routeConfirmation`, `omission`, `classification`
|
|
87
|
+
(`MadeExplicit` or `ExplicitUnchanged`) and `effectiveClassification`.
|
|
88
|
+
2. `view: "production-destination-identities"`: newly enrolled identity strings; existing identities
|
|
89
|
+
must survive unchanged.
|
|
90
|
+
3. The `diagnostics` and `executable-diagnostics` views and the exact `before` and `after` bytes.
|
|
91
|
+
4. Show the author the review, then call `apply` with `proposalId`, `expectedRevision` and
|
|
92
|
+
`expectedCatalogRevision`. Apply only the proposal that was reviewed.
|
|
93
|
+
|
|
94
|
+
Both report views refuse on a proposal that has no production destination report.
|
|
95
|
+
|
|
96
|
+
## Refusals and failures
|
|
97
|
+
|
|
98
|
+
- Refusals include an incomplete, duplicate, stale or foreign selection, an ambiguous or mismatched
|
|
99
|
+
route, an attempt to retarget an explicit destination, an unsupported expression, incomplete
|
|
100
|
+
imports or source, comment or identity loss, an unrelated executable blocker and missing
|
|
101
|
+
formatting consent.
|
|
102
|
+
- Failure kinds: `StaleRevision` (rediscover), `FormattingConsentRequired`, `ProposalRejected`
|
|
103
|
+
(read the conflicts and diagnostics), `RepairEvidenceWriteConflict` and `RepairEvidenceDrift`
|
|
104
|
+
(obtain and review a fresh proposal).
|
|
105
|
+
- `RolledBack` is a failure with verified restoration. `RecoveryRequired` and `PendingOperation`
|
|
106
|
+
mean a journal needs attention: inspect `workspace-state` and make recovery its own explicit
|
|
107
|
+
request. Never retry automatically after an unknown outcome.
|
package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md
CHANGED
|
@@ -237,9 +237,13 @@ canonical bytes. Event `description`, `documentation` and rename-only `id` are
|
|
|
237
237
|
authoring metadata, not new ESM bytes or replacements for catalog identity.
|
|
238
238
|
|
|
239
239
|
Binding is not the last gate before the reference runner. The runner needs an
|
|
240
|
-
execution plan
|
|
241
|
-
|
|
242
|
-
|
|
240
|
+
execution plan. An application-level refused construct blocks the whole plan, so no
|
|
241
|
+
specification in the model runs. An unadmitted projection (for example
|
|
242
|
+
`UnsupportedEventContext` or `UnsupportedProjectionBlock`) is scoped per specification:
|
|
243
|
+
only specifications whose given, appended, produced or cascaded events reach it, or that
|
|
244
|
+
supply, read, query or assert its read model, report unsupported; the others run and
|
|
245
|
+
`planIssues` lists the deferred issue. Older compilers block the whole plan for an
|
|
246
|
+
unadmitted projection; the toolchain executable subset names the introducing release.
|
|
243
247
|
|
|
244
248
|
What binds today, what the reference execution plan refuses, what is opaque, what is
|
|
245
249
|
authorable but not executable, and what blocks binding. A bundled compiler can be older
|
|
@@ -220,7 +220,7 @@ connection. Passing `open-workspace.path` does **not** avoid it, because the err
|
|
|
220
220
|
| Address-preserving | descriptions; bodies of rules and expressions; mappings between members that already exist; any edit that adds, removes or renames no addressed element. Also every edit in a model with no `.screenplay/identities.json` except persisted names | bounded text edit of the `.play` file, then compile the folder; or `propose-ast` |
|
|
221
221
|
| Catalog-changing (identity file present) | add, remove or rename a declaration (slice, command, event, read model, projection, ...), a property of a command, event, read model, composite type or trigger, a query, a query argument or a specification; create, delete, rename or move a mapped `.play` document (McpState refuses reopening with `IdentityMappingConflict`; use document operations in `propose-ast`); rename, remove or move an event, command, read model, constraint, module, feature or slice; move declarations between files (slices and features across logical parents: `propose-move`); contract evolution of a persisted event (new generation, property added, removed or retyped) | `propose-rename` or a reviewed `propose-ast`; never a blind text rename. Renaming a constraint resets its uniqueness index: ask first unless the request names it, then report the reset. A persisted event rename needs `id "OldName"` (added by default) |
|
|
222
222
|
| Concept `generate` | set/change/remove strategy and modifiers | `propose-ast` replaces `ConceptSyntax.generation` (`GenerationSyntax`; omit/null to remove), or reviewed `propose-source`; never hand-edit `generate` text. Preserve other concept members and inspect executable diagnostics: sequence PLAY0682, generated secrets PLAY0268, generated-rule proofs PLAY0688/0689, finite-support failures PLAY0691/0692. Pattern/random/rule and checksum validation bind as ESM v21 (Requires Screenplay 4.172.0, `screenplay --version`; older compilers refuse PLAY0268). Read `mcp-tools.md#concept-generation` for `arguments`, exact support and `rules[]`, not parsed diagnostic prose. |
|
|
223
|
-
| Repair | `PLAY0166`, `0478`, `0469`, `0471`, `0479`, `0516`, `0563`, `0564`, `0565`, `0614`, `0653`, `0683`, `0684` (and recipe-only `0397`) | `propose-repair` with `formatting`; PLAY0166/0478 may pin attachment evidence (`pinRepairEvidence` and `expectedRepairEvidenceRevision`), never fix-all PLAY0478 |
|
|
223
|
+
| Repair | `PLAY0166`, `0478`, `0469`, `0471`, `0479`, `0516`, `0563`, `0564`, `0565`, `0614`, `0653`, `0683`, `0684` (and recipe-only `0397`); `PLAY0470` only with author intent ([destination intent repair](destination-intent-repair.md)) | `propose-repair` with `formatting`; PLAY0166/0478 may pin attachment evidence (`pinRepairEvidence` and `expectedRepairEvidenceRevision`), never fix-all PLAY0478 |
|
|
224
224
|
| Inline event extraction | `produces event ...` to a declared event | `propose-extract-inline-event` |
|
|
225
225
|
| Parser-invalid document | no editable handles | `propose-source` `replace-document` with corrected source, or typed `propose-ast` document replacement |
|
|
226
226
|
| Unadmitted constructs | systems/operations, the `numbers exact` source mode | reviewed Authoring `propose-source` (whole documents) or `propose-ast` (typed edits); preserve intent and report PLAY0268 |
|
|
@@ -111,7 +111,7 @@ Continue with the same `proposalId` and returned `sourceRevision` as
|
|
|
111
111
|
or reads the root with its persisted identities.
|
|
112
112
|
|
|
113
113
|
The response includes `sourceRevision`, `outcome`, discovered/selected/executed/
|
|
114
|
-
passed/failed/unsupported counts, `executableDiagnostics`, `planIssues
|
|
114
|
+
passed/failed/unsupported counts, `executableDiagnostics`, `planIssues` (deferred projection issues stay listed even when the selected specifications pass), and `page`
|
|
115
115
|
(plus `proposalId` for candidate runs). Counts cover the entire selection, not one
|
|
116
116
|
page; unsupported cases are not executed. Outcomes are `passed`, `failed`,
|
|
117
117
|
`unsupported`, or overall `unbound`; only `passed` has `isError: false`. An unbound
|
|
@@ -355,8 +355,10 @@ gets no new pin, while any admitted revision requires preserving its stored name
|
|
|
355
355
|
`eventNeverPersisted: true` is refused for admitted revisions; otherwise it needs
|
|
356
356
|
storage-history knowledge, not merely an identity catalog. It skips a new pin, removes a redundant current-name
|
|
357
357
|
pin, but retains a pin for a different earlier name. Contradictory generation pins
|
|
358
|
-
refuse the rename. Do not promise a generation-2 payload-removal repair
|
|
359
|
-
|
|
358
|
+
refuse the rename. Do not promise a generation-2 payload-removal repair. `PLAY0470` has an
|
|
359
|
+
author-intent repair, never a no-input one: read
|
|
360
|
+
[destination intent repair](destination-intent-repair.md) when `repair-capabilities`
|
|
361
|
+
lists it under `intentActions`.
|
|
360
362
|
|
|
361
363
|
Requires Screenplay 4.152.0 or later (`screenplay --version`) for `storedName` (ESM v16).
|
|
362
364
|
|
|
@@ -378,12 +380,12 @@ then choose edits from evidence. Workflow, flags, guards and recovery:
|
|
|
378
380
|
[release baseline](release-baseline.md). Target evidence: toolchain
|
|
379
381
|
`references/diagnostics.md` (Reserved stored names and event pins).
|
|
380
382
|
|
|
381
|
-
Requires Screenplay 4.
|
|
383
|
+
Requires Screenplay 4.213.3 or later (`screenplay --version`) for the authoring-time PLAY0802 refusal; earlier compilers refuse stored stream `All` only at binding (PLAY0273, 4.150.0 or later).
|
|
382
384
|
|
|
383
385
|
A stream whose stored name is exactly `All`, from its name or `id "All"`,
|
|
384
|
-
|
|
385
|
-
to change that stored stream name; pinning it back to `All` is not a repair.
|
|
386
|
-
There is no typed
|
|
386
|
+
reports PLAY0802 in authoring diagnostics (binding keeps PLAY0273 as a backstop). Use discovered `propose-rename`
|
|
387
|
+
to change that stored stream name; pinning it back to `All` is not a repair, while a pin away from `All` is valid.
|
|
388
|
+
There is no typed PLAY0802 repair for this case. Existing `All` history reads as
|
|
387
389
|
source-only appends. Source/stream pins otherwise travel as ESM v8 stored names;
|
|
388
390
|
event stored names require v16.
|
|
389
391
|
|
|
@@ -23,6 +23,8 @@ from silently changing the reviewed candidate.
|
|
|
23
23
|
No automatic generation-evolution repair ships.
|
|
24
24
|
- `PLAY0479`: migrate optionality spelling with `PreserveTrivia`; document scope
|
|
25
25
|
migrates all occurrences together. Keep the `query Q => observable?` exception.
|
|
26
|
+
- `PLAY0470` is repaired only from an author-supplied destination intent, never
|
|
27
|
+
from a no-input action: read [destination intent repair](destination-intent-repair.md).
|
|
26
28
|
- Generation repairs PLAY0683/0684: [subjects, review and limits](mcp-tools.md#concept-generation).
|
|
27
29
|
- Compliance repairs PLAY0565/0653: [MCP tool guide](mcp-tools.md).
|
|
28
30
|
|
|
@@ -36,7 +38,7 @@ admit in the release job; no baseline requires an explicit mode;
|
|
|
36
38
|
`eventNeverPersisted: true` cannot unfreeze admitted revisions. Differing event pins carry
|
|
37
39
|
`storedName` in ESM v16. Pins are event-name identifiers,
|
|
38
40
|
shared by all generations and unique (PLAY0472). A renderer admits only the ESM versions it
|
|
39
|
-
bundles, so an older Stage can refuse v16. Stored stream `All` (even `id "All"`)
|
|
41
|
+
bundles, so an older Stage can refuse v16. Stored stream `All` (even `id "All"`) and stored source `Default` refuse PLAY0802; rename without
|
|
40
42
|
that pin. Evidence/limits: [MCP tool guide](mcp-tools.md).
|
|
41
43
|
|
|
42
44
|
Requires Screenplay 4.153.0 or later (`screenplay --version`) for the release baseline and its `baseline` command, and 4.152.0 or later for `storedName` (ESM v16).
|
package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/view-and-story-specs.md
CHANGED
|
@@ -144,8 +144,8 @@ not prove an entire list is empty: assert the unkeyed list query itself (an unke
|
|
|
144
144
|
the command needs its own constraint, or the rule is `recorded` as target-enforced.
|
|
145
145
|
- **Rebuild**: a view rebuilt from all facts must give the same rows. Mappings from
|
|
146
146
|
`$eventContext.occurred` or other occurrence data cannot be executed:
|
|
147
|
-
the
|
|
148
|
-
(`UnsupportedEventContext`). `given clock` does not change that; it supplies `$context.occurred`
|
|
147
|
+
the reference runner refuses every event-context path except the event source id
|
|
148
|
+
(`UnsupportedEventContext`), so specifications that reach that projection report unsupported. `given clock` does not change that; it supplies `$context.occurred`
|
|
149
149
|
to command productions only. Record such projection cases as capability gaps (keep the
|
|
150
150
|
mapping and the intended spec in design mode).
|
|
151
151
|
- **Corrections and backdated facts**: a correction is a new fact; specify the view after it.
|
|
@@ -44,8 +44,8 @@ Binding is not plan admission. Read model-authoring's
|
|
|
44
44
|
[language reference](../cratis-screenplay-model-authoring/references/language-reference.md)
|
|
45
45
|
when distinguishing executable declarations, refused projection shapes and opaque
|
|
46
46
|
code. Reached opaque code is **unsupported**, never passed; portable denial may
|
|
47
|
-
still execute before it.
|
|
48
|
-
|
|
47
|
+
still execute before it. An unadmitted projection makes unsupported only the specifications that reach it
|
|
48
|
+
(Screenplay 4.213.2 or later); other unsupported declarative constructs block the whole plan.
|
|
49
49
|
|
|
50
50
|
Read [reactions and cascades](references/reactions-and-cascades.md) when testing
|
|
51
51
|
ESM v6 actions; older compilers fail reaction/capture binding with PLAY0268.
|
|
@@ -121,7 +121,7 @@ Unattended work takes the conservative option and marks it `ASSUMED` in model
|
|
|
121
121
|
refuse PLAY0268 (command-surface `references/compliance.md`). Legacy markers are
|
|
122
122
|
deprecated (PLAY0565). Never remove protection to pass a tool. PLAY0515 also refuses
|
|
123
123
|
scalar/composite stream-id types and route mapping sources, including nested paths.
|
|
124
|
-
- Stream-id literals must be nonempty NFC text; composite ids use at least two named scalar parts; PLAY0504 is an error for route/destination type mismatch; a stored stream name exactly `All`
|
|
124
|
+
- Stream-id literals must be nonempty NFC text; composite ids use at least two named scalar parts; PLAY0504 is an error for route/destination type mismatch; a stored stream name exactly `All` (and a stored source name exactly `Default`) is refused with PLAY0802, including via an `id` pin (rename via `propose-rename`; a pin away from `All` is valid). Read [references/stream-id-rules.md](references/stream-id-rules.md) when choosing stream-id types, literals, composite ids or renaming a stream.
|
|
125
125
|
|
|
126
126
|
- Chronicle limits: before 19.59.6 (InMemory: 19.59.3) the SQL and InMemory providers do not settle unique claims (see the Requires line below);
|
|
127
127
|
index updates run after commit and may fail silently; composite values can
|
|
@@ -8,8 +8,9 @@ Rules for stream-id literals, composite ids and the reserved `All` stream name.
|
|
|
8
8
|
nominal type mismatch. Composite ids use at least two named scalar parts,
|
|
9
9
|
complete named mappings and canonical comparison, not guessed legacy splits.
|
|
10
10
|
Stored key-schema changes require a new stream identity or migration; see
|
|
11
|
-
toolchain `references/sources-and-streams.md`. A stored stream name exactly `All` (name or `id "All"`)
|
|
12
|
-
|
|
11
|
+
toolchain `references/sources-and-streams.md`. A stored stream name exactly `All` (name or `id "All"`) is refused with
|
|
12
|
+
PLAY0802 at authoring time, parallel to stored source `Default`; binding keeps
|
|
13
|
+
PLAY0273 as a backstop. Streams `all`, `ALL` and `Default`
|
|
13
14
|
remain valid. Rename via `propose-rename`; a pin retaining `All` cannot fix it.
|
|
14
15
|
Existing `All` history reads as source-only appends, not the renamed stream.
|
|
15
16
|
Source evidence and migration limits are in that reference.
|
|
@@ -166,7 +166,7 @@ processing or runtime retention. See command-surface `references/compliance.md`.
|
|
|
166
166
|
`subjectIsEventSourceId`, `observationState` (unstable on replay). `causation` and `tags` are
|
|
167
167
|
collections (path below them: PLAY0297 E). Unknown member: PLAY0295/0296 W.
|
|
168
168
|
`$eventSourceId` is the short form used in mappings. `occurred.Week` compiles but does not bind
|
|
169
|
-
(PLAY0273: derived value). Any `$eventContext` path other than `eventSourceId` binds, but the
|
|
169
|
+
(PLAY0273: derived value). Any `$eventContext` path other than `eventSourceId` binds, but the reference runner refuses it for the specifications that reach that projection ("An event-context value other than the event source identity needs occurrence context that ESM v1 facts do not carry"), so a model that must run uses `$context.occurred` in the command `produces` instead (it executes when the scenario has `given clock`). Catalogue: `Documentation/screenplay/projections/event-context.md`.
|
|
170
170
|
|
|
171
171
|
## PDL quick reference (most forms are compiled in `pdl-example.md` or `cheat-sheet-example.md`; `remove via join` and `$eventContext.occurred` are not)
|
|
172
172
|
- Header `projection Name => ReadModel`; variant group `projection Name` + `variant RM` /
|
|
@@ -180,7 +180,7 @@ collections (path below them: PLAY0297 E). Unknown member: PLAY0295/0296 W.
|
|
|
180
180
|
property; the label is decoration; joins never create instances).
|
|
181
181
|
- `children prop identified by k` + `from E key k` + `remove with E key k`; `nested prop` +
|
|
182
182
|
`from` + `clear with E`.
|
|
183
|
-
- Removal: `remove with Event`; `remove via join on Event` is compile-only and bind-only: at projection level it
|
|
183
|
+
- Removal: `remove with Event`; `remove via join on Event` is compile-only and bind-only: at projection level it makes only the specifications that reach that projection unsupported (`UnsupportedProjectionBlock`); the others run (Screenplay 4.213.2 or later; earlier compilers refuse the whole plan).
|
|
184
184
|
- Keys: only on `from` (a projection-level `key` routes nothing: PLAY0381 W).
|
|
185
185
|
- One `every`/`all` block per level for the executable model (else PLAY0268).
|
|
186
186
|
- Templates (`` `${a}` ``) and `$causedBy` parse but do not bind (PLAY0268).
|
|
@@ -117,12 +117,13 @@ older executable bytes/version. Consumer admission is separate.
|
|
|
117
117
|
|
|
118
118
|
| Code | Layer / severity | Meaning / fix |
|
|
119
119
|
| --- | --- | --- |
|
|
120
|
-
|
|
|
120
|
+
| PLAY0802 | Authoring error (`ReservedStoredName`) | A stored event-source name exactly `Default`, or stored event-stream name exactly `All`, is reserved; the stored name is the `id` pin when present, else the declaration name. Rename the stream with discovered `propose-rename`; keeping `id "All"` cannot fix it, while a pin away from the reserved name (`stream All` with `id "Archive"`) is valid. Comparison is ordinal: streams `all`, `ALL` and `Default` remain valid. Old `All` events read as source-only appends; moving history needs a Chronicle migration, not a language repair. Requires Screenplay 4.213.3 (`screenplay --version`); earlier compilers report these names only at binding, as PLAY0273. |
|
|
121
|
+
| PLAY0273 | Binding error | Executable binding keeps refusing a stored source `Default` or stored stream `All` (name or `id "All"` pin) as a backstop to PLAY0802. |
|
|
121
122
|
| PLAY0472 | Binding error | An event pin is not a valid event-name identifier, effective stored names differ across generations, or two events share a stored name. Use a valid, application-unique stored name shared by all generations; never rename stored history merely to hide the error. |
|
|
122
123
|
| PLAY0686 | Retired | Differing event pins travel as `storedName` in ESM v16. MCP's compatibility `eventPinWarnings` array is empty. Renderer admission is separate: a renderer that does not admit v16 must refuse the model rather than render it under the new name. |
|
|
123
124
|
|
|
124
|
-
|
|
125
|
-
|
|
125
|
+
PLAY0802 appears in authoring diagnostics and MCP readiness; match its reserved-name
|
|
126
|
+
message before choosing the rename. It adds no ESM version.
|
|
126
127
|
Source/stream pins already travel in ESM v8; differing event pins require v16.
|
|
127
128
|
Equal-name event pins are no-ops; PLAY0471 removal preserves canonical bytes.
|
|
128
129
|
Target evidence: a renderer must admit ESM v16 and preserve `storedName`, or refuse it.
|
|
@@ -375,10 +375,10 @@ bodies still leave their owner non-executable.
|
|
|
375
375
|
| Arithmetic or raw expression in a `produces` mapping | PLAY0268 | |
|
|
376
376
|
| Template `` `${x}` `` or `$causedBy` in a projection | PLAY0268 | |
|
|
377
377
|
| More than one `every`/`all` on one projection level | PLAY0268 | Chronicle keeps only the last |
|
|
378
|
-
| `$eventContext.<path>` other than `eventSourceId` |
|
|
379
|
-
| Projection-level `remove via join` |
|
|
380
|
-
| `all` beside removals, children or nested on one level |
|
|
381
|
-
| `join`, `children` or `remove via join` inside `nested` |
|
|
378
|
+
| `$eventContext.<path>` other than `eventSourceId` | unsupported specs | binds, but execution refuses: "An event-context value other than the event source identity needs occurrence context that ESM v1 facts do not carry". `$context.occurred` in command `produces` is different and executes when the scenario has `given clock` |
|
|
379
|
+
| Projection-level `remove via join` | unsupported specs | binds, but `UnsupportedProjectionBlock` marks only the specifications that reach the projection unsupported; the others run and `planIssues` lists the deferred issue |
|
|
380
|
+
| `all` beside removals, children or nested on one level | unsupported specs | binds; `UnsupportedProjectionBlock` (scoped per specification, like the rows above) |
|
|
381
|
+
| `join`, `children` or `remove via join` inside `nested` | unsupported specs | binds; `UnsupportedProjectionBlock` (scoped per specification, like the rows above) |
|
|
382
382
|
| `$eventContext.occurred.Week` | PLAY0273 | derived value |
|
|
383
383
|
| Projection `parent p` where `p` is not on the child event | PLAY0273 | "Event property not found" |
|
|
384
384
|
| `generated` or `returns` on an older compiler | PLAY0268 | admitted from ESM v7, see above |
|
|
@@ -393,7 +393,8 @@ bodies still leave their owner non-executable.
|
|
|
393
393
|
|
|
394
394
|
- Plain `produces` without `for` binds (PLAY0478, information) but means allocation in the
|
|
395
395
|
ESM and "the identifier" in rendered Arc code. Always write `for` on a plain `produces <Name>`; inline `produces event` omits it.
|
|
396
|
-
- A projection-level (root) `remove via join` binds, but the reference execution plan refuses it (`UnsupportedProjectionBlock`),
|
|
396
|
+
- A projection-level (root) `remove via join` binds, but the reference execution plan refuses it (`UnsupportedProjectionBlock`): only specifications whose events reach that projection, or that supply, read, query or assert its read model, report unsupported, and the others run. Chronicle wires it as a child pull. See the unsupported-specs rows above.
|
|
397
|
+
Requires Screenplay 4.213.2 (`screenplay --version`); earlier compilers refuse the whole plan, so no specification runs.
|
|
397
398
|
- V1 reports absent projection/children/nested targets
|
|
398
399
|
with PLAY0514 and unknown removal/capture events with PLAY0166. An unmapped
|
|
399
400
|
declared field can be found by opt-in `--check field-origins` (PLAY0534);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Projection (PDL) example
|
|
2
2
|
|
|
3
|
-
Projection forms that compile warning-free, bind on both tools and run in the reference runner without Unsupported results (`PlacingAnOrder`, `CancellingAnOrder`, `Depositing` and `RejectingAnEmptyCode` pass). The specifications exercise every, from, `set`, increment, remove with, all + count, add/subtract by, `clear` and the concept rules; `PlacingAnOrder` also runs the `children lines` block (through `LineAdded`) without asserting it; join, nested and variant groups bind but no specification drives them. Forms in this example: every, join, children, nested, clear with, remove with, increment/decrement, all + count, add/subtract by, set to, clear, no automap, literal mapping, variant group (no `=> RM`), concept rules not empty/max/length ==. `lineCount` is initialized in `OrderPlaced` and `shipping` is optional, because the reference runner requires every non-optional read-model property to be set after each fact. Rejected by the binder: more than one every/all block on one level (PLAY0268); `$eventContext.occurred.Week` (PLAY0273, derived value). Not in this example because
|
|
3
|
+
Projection forms that compile warning-free, bind on both tools and run in the reference runner without Unsupported results (`PlacingAnOrder`, `CancellingAnOrder`, `Depositing` and `RejectingAnEmptyCode` pass). The specifications exercise every, from, `set`, increment, remove with, all + count, add/subtract by, `clear` and the concept rules; `PlacingAnOrder` also runs the `children lines` block (through `LineAdded`) without asserting it; join, nested and variant groups bind but no specification drives them. Forms in this example: every, join, children, nested, clear with, remove with, increment/decrement, all + count, add/subtract by, set to, clear, no automap, literal mapping, variant group (no `=> RM`), concept rules not empty/max/length ==. `lineCount` is initialized in `OrderPlaced` and `shipping` is optional, because the reference runner requires every non-optional read-model property to be set after each fact. Rejected by the binder: more than one every/all block on one level (PLAY0268); `$eventContext.occurred.Week` (PLAY0273, derived value). Not in this example because the reference runner reports unsupported for every specification that reaches or asserts the projection (others run; `planIssues` lists the deferred issue): a `remove via join` on a projection's own (root) level (`UnsupportedProjectionBlock`; it binds, but on Chronicle v19.32.0 it creates no removal subscription, so `CustomerDeleted` would not remove an `OrderView`), and any event-context value other than the event source identity in a projection, such as `$eventContext.occurred` (`UnsupportedEventContext`). Quick reference: [cheat-sheet.md](cheat-sheet.md). The `every` block here maps a literal to show the form. Carry a timestamp on the event with `$context.occurred` in the producing command when a view must show it.
|
|
4
4
|
|
|
5
5
|
```screenplay
|
|
6
6
|
// PDL forms that bind executable on both tools.
|
package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json
CHANGED
|
@@ -37849,6 +37849,17 @@
|
|
|
37849
37849
|
"title": "An event is used more than once in one projection level\u0027s event or join set.",
|
|
37850
37850
|
"reserved": false,
|
|
37851
37851
|
"retired": false
|
|
37852
|
+
},
|
|
37853
|
+
{
|
|
37854
|
+
"code": "PLAY0802",
|
|
37855
|
+
"name": "ReservedStoredName",
|
|
37856
|
+
"severity": "error",
|
|
37857
|
+
"severities": [
|
|
37858
|
+
"error"
|
|
37859
|
+
],
|
|
37860
|
+
"title": "An event source has the reserved stored name Default, or an event stream has the reserved stored name All, including through an id pin.",
|
|
37861
|
+
"reserved": false,
|
|
37862
|
+
"retired": false
|
|
37852
37863
|
}
|
|
37853
37864
|
],
|
|
37854
37865
|
"mcpTools": [
|
|
@@ -42192,6 +42203,7 @@
|
|
|
42192
42203
|
"subject"
|
|
42193
42204
|
],
|
|
42194
42205
|
"optionalParameters": [
|
|
42206
|
+
"destinationIntent",
|
|
42195
42207
|
"expectedReleaseBaselineRevision",
|
|
42196
42208
|
"expectedRepairEvidenceRevision",
|
|
42197
42209
|
"includeContent",
|
|
@@ -42252,6 +42264,159 @@
|
|
|
42252
42264
|
"expectedRepairEvidenceRevision": {
|
|
42253
42265
|
"type": "string"
|
|
42254
42266
|
},
|
|
42267
|
+
"destinationIntent": {
|
|
42268
|
+
"type": "object",
|
|
42269
|
+
"properties": {
|
|
42270
|
+
"version": {
|
|
42271
|
+
"type": "integer",
|
|
42272
|
+
"const": 1
|
|
42273
|
+
},
|
|
42274
|
+
"productions": {
|
|
42275
|
+
"type": "array",
|
|
42276
|
+
"items": {
|
|
42277
|
+
"type": "object",
|
|
42278
|
+
"properties": {
|
|
42279
|
+
"subject": {
|
|
42280
|
+
"type": "object",
|
|
42281
|
+
"properties": {
|
|
42282
|
+
"revision": {
|
|
42283
|
+
"type": "string"
|
|
42284
|
+
},
|
|
42285
|
+
"documentId": {
|
|
42286
|
+
"type": "string"
|
|
42287
|
+
},
|
|
42288
|
+
"path": {
|
|
42289
|
+
"type": "string"
|
|
42290
|
+
}
|
|
42291
|
+
},
|
|
42292
|
+
"required": [
|
|
42293
|
+
"revision",
|
|
42294
|
+
"documentId",
|
|
42295
|
+
"path"
|
|
42296
|
+
],
|
|
42297
|
+
"additionalProperties": false
|
|
42298
|
+
},
|
|
42299
|
+
"for": {
|
|
42300
|
+
"type": "object",
|
|
42301
|
+
"description": "Existing typed ExpressionSyntax schema from syntax-schema. Non-null; executable binding admits only supported destination expressions.",
|
|
42302
|
+
"properties": {
|
|
42303
|
+
"kind": {
|
|
42304
|
+
"type": "string"
|
|
42305
|
+
}
|
|
42306
|
+
},
|
|
42307
|
+
"required": [
|
|
42308
|
+
"kind"
|
|
42309
|
+
],
|
|
42310
|
+
"additionalProperties": true
|
|
42311
|
+
},
|
|
42312
|
+
"route": {
|
|
42313
|
+
"type": "object",
|
|
42314
|
+
"properties": {
|
|
42315
|
+
"kind": {
|
|
42316
|
+
"type": "string",
|
|
42317
|
+
"enum": [
|
|
42318
|
+
"Legacy",
|
|
42319
|
+
"Named"
|
|
42320
|
+
]
|
|
42321
|
+
},
|
|
42322
|
+
"source": {
|
|
42323
|
+
"type": "object",
|
|
42324
|
+
"properties": {
|
|
42325
|
+
"revision": {
|
|
42326
|
+
"type": "string"
|
|
42327
|
+
},
|
|
42328
|
+
"documentId": {
|
|
42329
|
+
"type": "string"
|
|
42330
|
+
},
|
|
42331
|
+
"path": {
|
|
42332
|
+
"type": "string"
|
|
42333
|
+
}
|
|
42334
|
+
},
|
|
42335
|
+
"required": [
|
|
42336
|
+
"revision",
|
|
42337
|
+
"documentId",
|
|
42338
|
+
"path"
|
|
42339
|
+
],
|
|
42340
|
+
"additionalProperties": false
|
|
42341
|
+
},
|
|
42342
|
+
"stream": {
|
|
42343
|
+
"type": "object",
|
|
42344
|
+
"properties": {
|
|
42345
|
+
"revision": {
|
|
42346
|
+
"type": "string"
|
|
42347
|
+
},
|
|
42348
|
+
"documentId": {
|
|
42349
|
+
"type": "string"
|
|
42350
|
+
},
|
|
42351
|
+
"path": {
|
|
42352
|
+
"type": "string"
|
|
42353
|
+
}
|
|
42354
|
+
},
|
|
42355
|
+
"required": [
|
|
42356
|
+
"revision",
|
|
42357
|
+
"documentId",
|
|
42358
|
+
"path"
|
|
42359
|
+
],
|
|
42360
|
+
"additionalProperties": false
|
|
42361
|
+
}
|
|
42362
|
+
},
|
|
42363
|
+
"required": [
|
|
42364
|
+
"kind"
|
|
42365
|
+
],
|
|
42366
|
+
"additionalProperties": false,
|
|
42367
|
+
"oneOf": [
|
|
42368
|
+
{
|
|
42369
|
+
"properties": {
|
|
42370
|
+
"kind": {
|
|
42371
|
+
"const": "Legacy"
|
|
42372
|
+
}
|
|
42373
|
+
},
|
|
42374
|
+
"not": {
|
|
42375
|
+
"anyOf": [
|
|
42376
|
+
{
|
|
42377
|
+
"required": [
|
|
42378
|
+
"source"
|
|
42379
|
+
]
|
|
42380
|
+
},
|
|
42381
|
+
{
|
|
42382
|
+
"required": [
|
|
42383
|
+
"stream"
|
|
42384
|
+
]
|
|
42385
|
+
}
|
|
42386
|
+
]
|
|
42387
|
+
}
|
|
42388
|
+
},
|
|
42389
|
+
{
|
|
42390
|
+
"properties": {
|
|
42391
|
+
"kind": {
|
|
42392
|
+
"const": "Named"
|
|
42393
|
+
}
|
|
42394
|
+
},
|
|
42395
|
+
"required": [
|
|
42396
|
+
"source",
|
|
42397
|
+
"stream"
|
|
42398
|
+
]
|
|
42399
|
+
}
|
|
42400
|
+
]
|
|
42401
|
+
}
|
|
42402
|
+
},
|
|
42403
|
+
"required": [
|
|
42404
|
+
"subject",
|
|
42405
|
+
"for",
|
|
42406
|
+
"route"
|
|
42407
|
+
],
|
|
42408
|
+
"additionalProperties": false
|
|
42409
|
+
},
|
|
42410
|
+
"maxItems": 256,
|
|
42411
|
+
"minItems": 1
|
|
42412
|
+
}
|
|
42413
|
+
},
|
|
42414
|
+
"required": [
|
|
42415
|
+
"version",
|
|
42416
|
+
"productions"
|
|
42417
|
+
],
|
|
42418
|
+
"additionalProperties": false
|
|
42419
|
+
},
|
|
42255
42420
|
"expectedReleaseBaselineRevision": {
|
|
42256
42421
|
"type": "string"
|
|
42257
42422
|
}
|
|
@@ -42263,7 +42428,42 @@
|
|
|
42263
42428
|
"subject",
|
|
42264
42429
|
"formatting"
|
|
42265
42430
|
],
|
|
42266
|
-
"additionalProperties": false
|
|
42431
|
+
"additionalProperties": false,
|
|
42432
|
+
"if": {
|
|
42433
|
+
"properties": {
|
|
42434
|
+
"diagnosticCode": {
|
|
42435
|
+
"const": "PLAY0470"
|
|
42436
|
+
}
|
|
42437
|
+
},
|
|
42438
|
+
"required": [
|
|
42439
|
+
"diagnosticCode"
|
|
42440
|
+
]
|
|
42441
|
+
},
|
|
42442
|
+
"then": {
|
|
42443
|
+
"required": [
|
|
42444
|
+
"destinationIntent"
|
|
42445
|
+
],
|
|
42446
|
+
"properties": {
|
|
42447
|
+
"pinRepairEvidence": {
|
|
42448
|
+
"const": false
|
|
42449
|
+
},
|
|
42450
|
+
"formatting": {
|
|
42451
|
+
"const": "CanonicalizeTouchedDocuments"
|
|
42452
|
+
}
|
|
42453
|
+
},
|
|
42454
|
+
"not": {
|
|
42455
|
+
"required": [
|
|
42456
|
+
"expectedRepairEvidenceRevision"
|
|
42457
|
+
]
|
|
42458
|
+
}
|
|
42459
|
+
},
|
|
42460
|
+
"else": {
|
|
42461
|
+
"not": {
|
|
42462
|
+
"required": [
|
|
42463
|
+
"destinationIntent"
|
|
42464
|
+
]
|
|
42465
|
+
}
|
|
42466
|
+
}
|
|
42267
42467
|
}
|
|
42268
42468
|
},
|
|
42269
42469
|
{
|
|
@@ -43029,7 +43229,9 @@
|
|
|
43029
43229
|
"dropped-comments",
|
|
43030
43230
|
"semantic-diff",
|
|
43031
43231
|
"notes",
|
|
43032
|
-
"release-baseline"
|
|
43232
|
+
"release-baseline",
|
|
43233
|
+
"production-destinations",
|
|
43234
|
+
"production-destination-identities"
|
|
43033
43235
|
]
|
|
43034
43236
|
},
|
|
43035
43237
|
"documentId": {
|
|
@@ -43146,6 +43348,7 @@
|
|
|
43146
43348
|
"typed-contexts",
|
|
43147
43349
|
"source-map",
|
|
43148
43350
|
"repairs",
|
|
43351
|
+
"repair-intents",
|
|
43149
43352
|
"executable-model"
|
|
43150
43353
|
],
|
|
43151
43354
|
"description": "Source detail views return compact-header-v1, not full syntax: header metadata sizes and AST/source read pointers, then actual-parent child pages. Source pages enforce item and serialized-byte bounds; continue from nextOffset."
|
package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.
|
|
1
|
+
4.216.0
|
|
@@ -40,8 +40,9 @@ would otherwise consume it. Do not invent source-only route syntax.
|
|
|
40
40
|
Exactly `All` is reserved as a stored stream
|
|
41
41
|
name (declaration name or `id "All"` pin), just as `Default` is reserved for a
|
|
42
42
|
stored source name. Comparison is ordinal: streams `all`, `ALL` and `Default`
|
|
43
|
-
remain valid. Authoring
|
|
44
|
-
|
|
43
|
+
remain valid. Authoring compilation, both compilers and the editors refuse these
|
|
44
|
+
names with **PLAY0802** (`ReservedStoredName`); executable binding keeps refusing
|
|
45
|
+
them with **PLAY0273** as a backstop. Stage's STAGE-ESM-030 remains defense
|
|
45
46
|
in depth, not an additional admitted route.
|
|
46
47
|
|
|
47
48
|
Rename the stream through discovered `propose-rename`; an `id "All"` pin is
|
|
@@ -53,7 +54,7 @@ stream, so existing history stored under `All` reads as source-only appends
|
|
|
53
54
|
(or unrouted facts), not as the newly named stream. Moving that history needs
|
|
54
55
|
an explicit Chronicle data migration, not a language repair or invented route.
|
|
55
56
|
|
|
56
|
-
Requires Screenplay 4.
|
|
57
|
+
Requires Screenplay 4.213.3 or later (`screenplay --version`) for the authoring-time PLAY0802 refusal of stored stream `All` and stored source `Default`. Requires 4.150.0 or later for the binding refusal of `All`; earlier compilers accept it silently.
|
|
57
58
|
|
|
58
59
|
```screenplay
|
|
59
60
|
concept AccountId : Uuid
|