@cratis/pi 7.21.0 → 7.22.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-screenplay-automations-and-translations/SKILL.md +19 -12
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +4 -3
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +13 -15
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/cases-to-specify.md +4 -4
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +21 -0
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/provenance.md +4 -2
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +7 -4
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/verification.json +4 -4
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +38 -36
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/complete-examples.md +1 -1
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/invocation-identity.md +84 -0
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/refusals-and-redelivery.md +102 -0
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/specifying-triggers-and-clock.md +4 -2
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +28 -16
- package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +9 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +15 -13
- package/package/corpus/skills/cratis-screenplay-command-surface/references/operations.md +80 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/policy-persona-seed.md +23 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/verification.json +2 -2
- package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +9 -6
- package/package/corpus/skills/cratis-screenplay-discovery/references/storming-loop.md +6 -5
- package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +7 -5
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +6 -5
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +39 -49
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +5 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +48 -8
- package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +44 -42
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +46 -9
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +35 -11
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +118 -13
- package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +3 -3
- package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +11 -6
- 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 -2
- package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +10 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/references/guarded-actions.md +79 -0
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +9 -7
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +6 -3
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/verification.json +2 -2
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +3 -2
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +13 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +3 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +3 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/references/slicing.md +40 -0
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +24 -16
- package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +103 -0
- package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +5 -6
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +4 -4
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +4 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/verification.json +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +34 -32
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +47 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +57 -9
- package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +6 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +19 -10
- package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +4 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +8 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +90 -27
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +10 -6
- package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +29 -12
- package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +91 -136
- package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +7 -5
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +20 -0
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +9 -5
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +8 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +2 -2
- package/package.json +1 -1
|
@@ -23,25 +23,13 @@ contract is in `cratis-screenplay-ui-composition`.
|
|
|
23
23
|
|
|
24
24
|
## Verified product sources
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
Facts about the MCP connection, source-map, `whenAppendedEvent`, identity
|
|
35
|
-
persistence and the syntax-only constructs were read at tag `v4.66.0`
|
|
36
|
-
(`Documentation/screenplay/mcp/{reference,install,edit}.md`,
|
|
37
|
-
`Source/DotNET/Screenplay.Mcp/`) and probed against the 4.66.0 tool (persona,
|
|
38
|
-
trigger, `@pii`, generated values, operations, streams, automation binding).
|
|
39
|
-
Repair and refactoring guidance follows main `fd18129` (`commands.md`,
|
|
40
|
-
`events.md`, `types.md`, `diagnostics.md`, `mcp/authoring-tools.md`, `vscode.md`,
|
|
41
|
-
decision 0023); the `v4.31.0` documents (`ast-authoring`, `mcp`, `mcp-authoring`,
|
|
42
|
-
`printing`, `file-references`, `diagnostics`) and release notes v4.17.0 to v4.31.0
|
|
43
|
-
established the original baseline. When checking compiler, CLI or MCP compatibility, read the full version table in
|
|
44
|
-
`cratis-screenplay-toolchain` (`references/versions.md`).
|
|
26
|
+
Current authoring/MCP guidance follows Screenplay v4.125.0
|
|
27
|
+
`Documentation/screenplay/mcp/`, `ast-authoring.md`, `folders.md`, `vscode.md`.
|
|
28
|
+
Discover installed tools and schemas; CLI bundles can differ from the standalone
|
|
29
|
+
tool. Pins are in `cratis-screenplay-toolchain` `references/versions.md`.
|
|
30
|
+
Historical connection/binding probes below remain labeled 4.66.0; the complete
|
|
31
|
+
registration example was compiled/tested at 4.68.0, not reclassified as a current
|
|
32
|
+
execution probe. Earlier source attribution is in `references/provenance.md`.
|
|
45
33
|
|
|
46
34
|
## Locate and connect
|
|
47
35
|
|
|
@@ -54,17 +42,16 @@ directory when it holds `.play` files). Only when it answers that no root was gi
|
|
|
54
42
|
or that several roots are offered, pass `path`: the folder holding the project's `.play` files, otherwise the
|
|
55
43
|
folder the user names. Without a project, the server works in `Documents/Screenplay`
|
|
56
44
|
in the user's home folder, so do not invent a location. A root fixed at launch
|
|
57
|
-
|
|
45
|
+
can switch only to the corresponding model folder in a registered Git worktree
|
|
46
|
+
of the same repository. Pass the worktree checkout or exact model directory as
|
|
47
|
+
`path`; unrelated roots return `RootChangeRefused`. Switching clears proposals
|
|
48
|
+
and uses the destination's own identity state and journal; nothing migrates.
|
|
49
|
+
Submodules and `--separate-git-dir` checkouts require another connection.
|
|
58
50
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
cannot prevent it. Start `screenplay mcp <model-folder>` or `cratis screenplay mcp`
|
|
64
|
-
in a project (it locates the model: the project's `.play` files, else `Source/` or `src/`, else `Screenplay/`).
|
|
65
|
-
Send `initialize` and `notifications/initialized` before any tool call;
|
|
66
|
-
`tools/list` returns 29 tools (30 on MCP-Apps hosts). Read `references/mcp-loop.md` when connecting, coordinating connection ownership, or handling proposal and recovery failures. Details:
|
|
67
|
-
[MCP loop](references/mcp-loop.md).
|
|
51
|
+
Prefer a fixed root; the historical dynamic-roots bug and connection procedure
|
|
52
|
+
are in [MCP loop](references/mcp-loop.md). Send `initialize` and
|
|
53
|
+
`notifications/initialized` before any tool call, then discover `tools/list`
|
|
54
|
+
schemas rather than relying on a remembered count.
|
|
68
55
|
|
|
69
56
|
|
|
70
57
|
Look first for the project's existing `.play` files: the folder holding them is the
|
|
@@ -100,10 +87,14 @@ can keep that entry point; use the project's supported installation channel.
|
|
|
100
87
|
of `.play` files is one application, not independent files.
|
|
101
88
|
2. Use `search-declarations`, `declaration-details`, `find-references` and
|
|
102
89
|
`dependencies` to locate the owning declaration and affected references.
|
|
103
|
-
3. Read diagnostics and coverage limitations.
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
90
|
+
3. Read diagnostics and coverage limitations. Use `dependency-graph` for container
|
|
91
|
+
edges, declared-dependency coverage, cycles and advisory order; the board's
|
|
92
|
+
dependency-map toggle exposes this evidence visually. Unknown or ambiguous
|
|
93
|
+
bindings are not an empty, successful dependency graph.
|
|
94
|
+
4. Use `find-fixtures` for value occurrences (including example/override origins
|
|
95
|
+
and event routes) and `find-assertion-gaps` for authored assertion gaps. Neither
|
|
96
|
+
executes specifications. `diagnostics` accepts `scope` and opt-in `checks`;
|
|
97
|
+
skipped completeness checks are not passes. Details: `references/mcp-tools.md`.
|
|
107
98
|
5. Echo `sourceRevision` on subsequent pages. Restart the query after drift;
|
|
108
99
|
never combine pages from different snapshots.
|
|
109
100
|
6. For screens, also discover the template, form, toolbar, package/icon and
|
|
@@ -193,9 +184,15 @@ Read `read-workspace` with `view: "diagnostics"`, then `view: "repairs"` at the
|
|
|
193
184
|
same revision. Pass the returned `diagnosticCode`, `subject`, required formatting
|
|
194
185
|
and both revisions to `propose-repair`; preview with `read-proposal`, then `apply`.
|
|
195
186
|
Only verified repairs are listed, and the selected repair gets a fresh transaction.
|
|
187
|
+
For PLAY0166/PLAY0478, use the evidence-pinned loop in `references/mcp-tools.md`:
|
|
188
|
+
`pinRepairEvidence` plus `expectedRepairEvidenceRevision` prevent attachment drift
|
|
189
|
+
from silently changing the reviewed candidate.
|
|
196
190
|
|
|
197
191
|
- `PLAY0166` declares a missing produced event; `PLAY0478` is a routing decision
|
|
198
|
-
(identifier destination); `PLAY0471` removes a redundant name-equal event pin.
|
|
192
|
+
(identifier destination, never fix-all); `PLAY0471` removes a redundant name-equal event pin.
|
|
193
|
+
- `PLAY0516` repairs presentation order by moving a sibling or import, or pinning
|
|
194
|
+
a producer before a glob. It preserves semantics/identities and introduces no
|
|
195
|
+
new timeline findings; evidence pinning is unsupported for this repair.
|
|
199
196
|
- `PLAY0469` removes an inline identifier payload copy: it **changes the event
|
|
200
197
|
contract**, refuses consumer/opaque impact, has no fix-all, and the catalog does
|
|
201
198
|
not prove events were persisted, so ask about stored contracts first.
|
|
@@ -226,9 +223,10 @@ module and its features, each feature importing its folder
|
|
|
226
223
|
(`import "Orders/*.play"`); a slice file holds only its `slice`, because the
|
|
227
224
|
import places it in its feature. When you write or reorganize files yourself,
|
|
228
225
|
do not restate `module`/`feature` in a slice file, and do not leave a barrel
|
|
229
|
-
that declares a scope but imports nothing. `expand-layout`
|
|
230
|
-
|
|
231
|
-
|
|
226
|
+
that declares a scope but imports nothing. At 4.125.0 `expand-layout` writes
|
|
227
|
+
import barrels and slice-only leaves, preserving sibling and interleaved member
|
|
228
|
+
order. It refuses a proposal that would change that order; without an ordering
|
|
229
|
+
root its review discloses the path-order fallback. When choosing file placement, read the
|
|
232
230
|
[language reference](references/language-reference.md) for placement rules.
|
|
233
231
|
|
|
234
232
|
Parent scaffolding carries no duplicated module forms or contributions. Compile
|
|
@@ -243,6 +241,11 @@ a model only ever text-edited has none. A restart must not silently mint new IDs
|
|
|
243
241
|
do not delete or overwrite conflicting identity state to get a green result, and do
|
|
244
242
|
not text-rename identity-affecting declarations in a model that has it.
|
|
245
243
|
|
|
244
|
+
Default root discovery preserves ancestor identity state and journals. Inspect
|
|
245
|
+
`rootBindingConflict` in `open-workspace`/`workspace-state` when several state roots
|
|
246
|
+
compete; do not delete state or mint replacement identities. To recover a competing
|
|
247
|
+
journal, first open that root explicitly, then inspect its operation ID.
|
|
248
|
+
|
|
246
249
|
A pending journal blocks normal work. Inspect `workspace-state`; invoke
|
|
247
250
|
`recover-workspace` only for the identified interrupted operation within the
|
|
248
251
|
requested recovery scope. Unexpected external edits block rollback. Preserve
|
|
@@ -278,10 +281,9 @@ that the code compiles or behaves. Read `references/mcp-tools.md#code-attachment
|
|
|
278
281
|
it defines them and maps them onto V1 to V5. `screenplay --warnaserror` checks
|
|
279
282
|
syntax plus the consistency rules (`PLAY0282`-`PLAY0294`) but never binds, so a
|
|
280
283
|
clean run is not a bound or executable result.
|
|
281
|
-
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
Stage 4.24.2): none is a reason to drop or stub the construct.
|
|
284
|
+
- Operations/exact numbers remain unadmitted; source/stream routes bind as ESM v8,
|
|
285
|
+
and generated values/responses as v7. CLI 3.41.0 render passes v7 to Stage but
|
|
286
|
+
refuses newer versions. A source contract is never dropped or stubbed to bind.
|
|
285
287
|
- Distinguish authoring acceptance from `executableReady`; unsupported backend
|
|
286
288
|
capabilities are not a reason to drop source constructs or invent stubs.
|
|
287
289
|
- If execution is intended, validate with the owning downstream runtime as well.
|
|
@@ -301,7 +303,7 @@ a generated app that silently drops authored UI. Use the Screenplay-owned canoni
|
|
|
301
303
|
corpus fixture path when it exists instead of copying `.play` examples into this
|
|
302
304
|
repository.
|
|
303
305
|
|
|
304
|
-
Repair and refactoring guidance follows Screenplay
|
|
306
|
+
Repair and refactoring guidance follows Screenplay v4.125.0. The Cratis
|
|
305
307
|
CLI bundles its own Screenplay version, so check the installed `tools/list`
|
|
306
308
|
schemas before relying on a view or argument named here (for example
|
|
307
309
|
`dropped-comments` or `implementation-requirements`). Do not invent a command,
|
package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
## Contents
|
|
7
7
|
|
|
8
8
|
- Accepted constructs
|
|
9
|
+
- Container dependencies and exact numbers
|
|
9
10
|
- Complete model
|
|
10
11
|
- Source validity is not execution
|
|
11
12
|
- Not in the language yet
|
|
@@ -21,7 +22,7 @@ repository is the full list; this page is the authoring summary.
|
|
|
21
22
|
|
|
22
23
|
**Top level:** `domain`, `import`, `concept`, `type`, `policy`, `persona`,
|
|
23
24
|
`authentication`, `trigger`, `theme`, `layout`, `ui profile`, `behavior`,
|
|
24
|
-
`module`, `seed`,
|
|
25
|
+
`module`, `seed`, authoring-only `system`, and admitted `eventsource` with its `stream`s (ESM v8).
|
|
25
26
|
|
|
26
27
|
**Inside a module:** `description`, `authorize`, `import "<glob>"`,
|
|
27
28
|
`screen`/`dialog` templates, `form`, `contribute`, `on`/`uses` behavior
|
|
@@ -65,6 +66,35 @@ tagged fence (` ```csharp `); the older language-line form still parses with
|
|
|
65
66
|
warning `PLAY0397`. Query the MCP's `syntax-schema` instead of inventing JSON
|
|
66
67
|
members or translating names from memory.
|
|
67
68
|
|
|
69
|
+
## Container dependencies and exact numbers
|
|
70
|
+
|
|
71
|
+
At Screenplay 4.125.0, modules and features accept `depends on <Name>`, one
|
|
72
|
+
per line. Bare targets resolve inside out (siblings, ancestor siblings, root
|
|
73
|
+
modules); qualified targets match an unambiguous trailing address. Merged files
|
|
74
|
+
accumulate each owner's declarations in file-path order; imports affect board
|
|
75
|
+
order, not accumulation. Dependencies are optional authoring metadata, not runtime
|
|
76
|
+
or implementation order. See `cratis-screenplay-slice-design` `references/slicing.md`
|
|
77
|
+
for coverage diagnostics and MCP `dependency-graph` `declarations` evidence.
|
|
78
|
+
|
|
79
|
+
A top-level `numbers exact` preamble opts each file into bounded decimal source
|
|
80
|
+
literals without Double rounding. All files/import barrels must agree on mode
|
|
81
|
+
(PLAY0508–PLAY0513 diagnose directive/range/mode errors). Exact mode is authorable,
|
|
82
|
+
not admitted by any supported ESM version (`PLAY0268`). Do not confuse this with
|
|
83
|
+
ESM v7 generated values and responses.
|
|
84
|
+
|
|
85
|
+
Typed roots (`ApplicationSyntax`, `ProjectionSyntax`, `CaptureSyntax`,
|
|
86
|
+
`SpecificationSyntax`) carry `sourceOptions: {"numericMode":"exact"}`. Missing
|
|
87
|
+
options default independently to Legacy, including nested roots; null/unknown
|
|
88
|
+
options and conflicting modes reject. Exact literal slots use
|
|
89
|
+
`{"literalType":"ExactNumber","value":"9007199254740993"}`: a canonical fixed-point
|
|
90
|
+
string, not a JSON number/JavaScript Number. Plain numbers, legacy envelopes and
|
|
91
|
+
noncanonical/out-of-range strings reject in Exact trees. An ExactNumber tag does
|
|
92
|
+
not opt a Legacy root in. Change mode as a whole-tree edit (leaves and all root
|
|
93
|
+
options), not just a flag; fragment printing keeps the owner's mode without a
|
|
94
|
+
nested preamble.
|
|
95
|
+
|
|
96
|
+
Sources: v4.125.0 `slices.md`, `folders.md`, `ast-authoring.md`, `grammar.md`.
|
|
97
|
+
|
|
68
98
|
## Complete model
|
|
69
99
|
|
|
70
100
|
This registration model uses an inline event and context identity rather than
|
|
@@ -121,13 +151,20 @@ module Projects
|
|
|
121
151
|
|
|
122
152
|
## Source validity is not execution
|
|
123
153
|
|
|
154
|
+
The table and binding inventory below retain their historical 4.66.0/4.68.0
|
|
155
|
+
probe labels; do not use them as current tool admission evidence. At 4.125.0,
|
|
156
|
+
`screenplay test` and MCP `run-specifications` expose reference execution,
|
|
157
|
+
and sources/streams/routes bind as ESM v8. Operations and exact numeric mode
|
|
158
|
+
still refuse binding. Use the installed tool and the version table in
|
|
159
|
+
`cratis-screenplay-toolchain` for current verdicts, not an older negative probe.
|
|
160
|
+
|
|
124
161
|
A construct can be in one of four states. Say which one you checked.
|
|
125
162
|
|
|
126
163
|
| State | What establishes it | What it does not prove |
|
|
127
164
|
| --- | --- | --- |
|
|
128
165
|
| **Parsed** | `screenplay <folder> --warnaserror` or MCP authoring diagnostics: syntax plus the model-consistency checks (`PLAY0282`-`PLAY0294`, for example a specification event that no producer can emit, `PLAY0285`) | Binding, execution, or anything about attached code. It never binds, so it cannot report `PLAY0268`, and the tool never reads `file` attachments |
|
|
129
166
|
| **Bound** | Semantic binding to the executable semantic model (ESM): MCP `executableReady`, executable diagnostics | That the reference execution plan admits the model, or that any specification passes |
|
|
130
|
-
| **Reference-executed** |
|
|
167
|
+
| **Reference-executed** | `screenplay test` or MCP `run-specifications` passes the selected specification | Target behavior; opaque code and external services never run here |
|
|
131
168
|
| **Target-executed** | Stage or a rendered application runs it with the implementations supplied | Nothing further in Screenplay |
|
|
132
169
|
|
|
133
170
|
Map the states onto the verdicts of `cratis-screenplay-modeling-lifecycle`:
|
|
@@ -185,12 +222,13 @@ Screenplay 4.66.0 (before 3.28.2, Screenplay 4.60.1, differ where stated).
|
|
|
185
222
|
| --- | --- |
|
|
186
223
|
| Binds and runs in the reference runner | `StateChange`/`StateView` slices; `produces` including `when` conditions over command properties and literal tags; the portable validation rules, `matches email`, quoted `matches` patterns and `require` over command properties; declarative policies and `authorize` on modules, features, commands and keyed queries; `unique` constraints; projections as Chronicle lowers them, including variants, except the projection constructs in the next row; specifications, including `given caller`, `then denied` and `when append` |
|
|
187
224
|
| Binds, but the reference execution plan refuses it | A projection-level `remove via join`; `all` beside removals, `children` or `nested`; a `join`, `children` or `remove via join` inside `nested`; any event-context value other than the event source identity in a projection mapping or key, such as `$eventContext.occurred`, `$eventContext.sequenceNumber` or `$eventContext.causedBy.subject` (`$eventSourceId` and `$eventContext.eventSourceId` run) |
|
|
188
|
-
| Binds as ESM v6 on Screenplay 4.66.0, standalone and Cratis CLI 3.28.2 (probed); `PLAY0268` on Cratis CLI before 3.28.2 | `Automation` and `Translate` slices, reactions that produce or invoke, captures, top-level `trigger`, clock, trigger and capture specifications. The
|
|
225
|
+
| Binds as ESM v6 on Screenplay 4.66.0, standalone and Cratis CLI 3.28.2 (probed); `PLAY0268` on Cratis CLI before 3.28.2 | `Automation` and `Translate` slices, reactions that produce or invoke, captures, top-level `trigger`, clock, trigger and capture specifications. The current standalone `screenplay test`/MCP reference route evaluates admitted v6 actions; the historical Stage 4.24.2 probe rendered none of them (the whole automation is gap-fill) |
|
|
189
226
|
| Reaction with trigger `reads` | Direct-producing (or code-bodied) reaction with `reads`: `PLAY0268` ("ESM v6 cannot protect that decision dependency", decision 0006), non-executable. Invokes-only reaction with `reads`: information only; the invoked command must declare and protect its own decision reads. Keep the `reads`; never remove them to obtain binding |
|
|
190
227
|
| Binds as opaque code (v3); reference runner reports unsupported | Bodied reducers, bodied named rules, fenced `validate` blocks, code or file policies. A pure reducer body is the only attachment Stage 4.24.0 admits |
|
|
191
228
|
| Information only, never blocks (probed) | `persona` (report-only: `PLAY0270`, the policies it lists must exist), `authentication`, `domain`, `seed`, descriptions and `file` provenance. A persona does not block binding and does not change behavior, so state persona scope in a description or a policy the model uses |
|
|
192
229
|
| Binds as ESM v7 on standalone Screenplay 4.68.0 (source and release notes; `PLAY0268` on the 4.66.0 in Cratis CLI 3.28.x, probed) | `generated` properties and `returns` responses, generated fixtures and `then returns`: bound and executed by the reference runner; a policy, rule or requirement that references a generated value is `PLAY0273`, and a generated property on a concept with validation rules is `PLAY0268`. Stage 4.24.2 does not render them (`STAGE-ESM-016`, tracked in Stage#201): gap-fill |
|
|
193
|
-
| Authorable, not executable (
|
|
230
|
+
| Authorable, not executable (PLAY0268) | Systems/operations, exact numbers and refusal/redelivery remain unadmitted |
|
|
231
|
+
| Current routing and actor admission | Sources/streams and command/specification routes bind and reference-execute as v8; reaction `runs as system role` supplies the invocation actor as v10 on 4.125.0. Whole-workspace binding determines executable availability; CLI/Stage realization remains separate |
|
|
194
232
|
| Blocks binding (`PLAY0268`) | `@pii`/`@sensitive` concepts (probed: "compliance attributes require portable data-subject semantics"), command `handler` (never binds; a command cannot declare both `produces` and `handler`, `PLAY0035`), bare `rule <Name>`, `require` or conditions over read-model paths, dates and `today` in comparisons, `$context.tenant`/claims/roles/causation in `produces`, `$env` conditions, `file` constraints, unquoted `import` of an external contract, a read model whose keyed queries in its own slice do not share one `by` property (none, or two different properties; several queries over the same property bind), any query other than `=> <ReadModel> optional` with one caller-supplied `by` argument (so also observable, filtered, scoped and performer-backed queries), `$causedBy` and templates in projections |
|
|
195
233
|
| Blocks binding (`PLAY0271`, legacy meaning) | Command `reads` and `concurrency` |
|
|
196
234
|
| Deferred (`PLAY0269`, information) | Screens, layouts, templates, forms, contributions, UI profiles, themes, behaviors and `on`/`uses` |
|
|
@@ -220,11 +258,10 @@ full historical shapes, not deployed-schema immutability or a working migrator.
|
|
|
220
258
|
Code attachment/source-map support likewise does not prove code round-trip
|
|
221
259
|
execution equivalence.
|
|
222
260
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
at a release-ready admission, decision 0025). Do not drop them for the sake of a green bind.
|
|
261
|
+
Operations remain authorable/unadmitted (PLAY0268). Named event sources/streams
|
|
262
|
+
and routes bind and reference-execute as v8 on 4.125.0; reaction identity as v10.
|
|
263
|
+
Use standalone `screenplay test` or MCP `run-specifications` for a reference
|
|
264
|
+
verdict, and independently check CLI/Stage admission. Never drop a contract to bind.
|
|
228
265
|
Generated values and `returns` are no longer in this group: they bind from 4.68.0 (ESM v7).
|
|
229
266
|
Protected reads and `derive`/`provide` (not admitted by any supported ESM version) have no documented
|
|
230
267
|
syntax at v4.68.0: do not teach or invent one. Affected-instance declarations, per-event data
|
|
@@ -35,12 +35,17 @@ Cratis CLI before 3.28.2 bundled 4.60.1, whose tool set and views differ: read `
|
|
|
35
35
|
notifications/initialized before using tools".
|
|
36
36
|
3. Pass a physical path. Symbolic links and reparse points are refused, including
|
|
37
37
|
`.screenplay` metadata.
|
|
38
|
-
4. `tools/list`
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
4. Read `tools/list` schemas once per connection; never hard-code counts or
|
|
39
|
+
argument lists. MCP-Apps hosts also expose `visualize-model`.
|
|
40
|
+
5. At 4.125.0 a startup root may switch to the same relative model folder in a
|
|
41
|
+
registered Git worktree of its repository. `open-workspace.path` accepts the
|
|
42
|
+
checkout or exact model folder. Shared Git directory and registration
|
|
43
|
+
back-pointer must agree physically; unrelated/malformed/unregistered roots,
|
|
44
|
+
submodules and `--separate-git-dir` checkouts refuse (`RootChangeRefused`).
|
|
45
|
+
Switching clears proposals and cached state, then uses that worktree's own
|
|
46
|
+
identities/journal. A pending journal blocks only its root. If an opened
|
|
47
|
+
worktree is removed, explicitly return to the startup root; if the startup
|
|
48
|
+
root is removed, start a new connection. No simultaneous named workspaces.
|
|
44
49
|
|
|
45
50
|
### Roots bug and the workaround
|
|
46
51
|
|
|
@@ -93,7 +98,9 @@ the server sends `roots/list` and serves `tools/list` after the reply).
|
|
|
93
98
|
|
|
94
99
|
1. `tools/list` once per connection.
|
|
95
100
|
2. Orient cheaply: `describe-application` summary, `diagnostics`, then scoped
|
|
96
|
-
`search-declarations`, `declaration-details`, `dependencies`.
|
|
101
|
+
`search-declarations`, `declaration-details`, `dependencies`/`dependency-graph`.
|
|
102
|
+
Diagnostics `scope` includes descendants and direct dependents; `checks` opts
|
|
103
|
+
into completeness warnings (skipped on whole-source errors). Paging with
|
|
97
104
|
`offset > 0` requires `expectedSourceRevision`.
|
|
98
105
|
3. `open-workspace` and keep `revision` and `catalogRevision`. Opening writes
|
|
99
106
|
nothing. With `identityPersistence: "root-local-on-apply"` the identities file
|
|
@@ -111,8 +118,8 @@ the server sends `roots/list` and serves `tools/list` after the reply).
|
|
|
111
118
|
Proposed, and its `sketch` argument previews a what-if of whole documents
|
|
112
119
|
without writing. An
|
|
113
120
|
unintended executable regression is discarded (`discard-proposal`) and
|
|
114
|
-
re-proposed. Intent the user has accepted that does not run yet (
|
|
115
|
-
|
|
121
|
+
re-proposed. Intent the user has accepted that does not run yet (operations,
|
|
122
|
+
exact numbers or refusal/redelivery; PLAY0268 by design)
|
|
116
123
|
may be applied from a reviewed `Authoring` proposal: disclose the new
|
|
117
124
|
diagnostics, report V3 as not binding-ready, and never drop or stub the
|
|
118
125
|
construct. The server's own guidance is to apply such a proposal only when
|
|
@@ -154,10 +161,11 @@ the server sends `roots/list` and serves `tools/list` after the reply).
|
|
|
154
161
|
| --- | --- | --- |
|
|
155
162
|
| 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` |
|
|
156
163
|
| 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; 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) |
|
|
157
|
-
| Repair | `PLAY0166`, `0478`, `0469`, `0471`, `0479` (and recipe-only `0397`) | `propose-repair` with `formatting` |
|
|
164
|
+
| Repair | `PLAY0166`, `0478`, `0469`, `0471`, `0479`, `0516` (and recipe-only `0397`) | `propose-repair` with `formatting`; PLAY0166/0478 may pin attachment evidence (`pinRepairEvidence` and `expectedRepairEvidenceRevision`), never fix-all PLAY0478 |
|
|
158
165
|
| Inline event extraction | `produces event ...` to a declared event | `propose-extract-inline-event` |
|
|
159
166
|
| Parser-invalid document | no editable handles | `propose-ast` `replace-document` with a whole typed document, or fix the text |
|
|
160
|
-
|
|
|
167
|
+
| Unadmitted constructs | systems/operations, exact numbers, refusal/redelivery | reviewed Authoring `propose-ast`; preserve intent and report PLAY0268 |
|
|
168
|
+
| Admitted source/stream routing | ESM v8 at 4.125.0 | typed `propose-ast`; `propose-rename` repairs proven route references; target admission separate |
|
|
161
169
|
|
|
162
170
|
## Identity state (`.screenplay/identities.json`)
|
|
163
171
|
|
|
@@ -175,6 +183,22 @@ the server sends `roots/list` and serves `tools/list` after the reply).
|
|
|
175
183
|
"semantics"` returns identity assignments, not a model summary.
|
|
176
184
|
- See "Make one coherent proposal" in SKILL.md for the exclusive-write prerequisite of `apply`.
|
|
177
185
|
|
|
186
|
+
### Root discovery conflicts
|
|
187
|
+
|
|
188
|
+
At Screenplay 4.125.0 default discovery preserves `.screenplay/identities.json`
|
|
189
|
+
or `pending.json` on the ancestor-or-self path from the offered project to the
|
|
190
|
+
discovered model. Empty metadata folders/backups do not count. With several
|
|
191
|
+
state roots, the nearest the offered project wins. `rootBindingConflict` in
|
|
192
|
+
`open-workspace`/`workspace-state` contains `kind: "WorkspaceRootConflict"`,
|
|
193
|
+
`boundRoot`, ordered `stateRoots` and `pendingRoots`; it is omitted without a
|
|
194
|
+
conflict. A journal anywhere on that path blocks bound-root reads/writes too.
|
|
195
|
+
|
|
196
|
+
To recover a competing journal, explicitly `open-workspace` on its root (which
|
|
197
|
+
may return `PendingOperation`), inspect `workspace-state` there, then recover
|
|
198
|
+
that operation within the approved scope. Recovery at the outer root cannot
|
|
199
|
+
recover a nested journal. Never delete metadata, migrate identities implicitly
|
|
200
|
+
or create a fallback folder to bypass the conflict.
|
|
201
|
+
|
|
178
202
|
## Read-only views worth knowing
|
|
179
203
|
|
|
180
204
|
- **`source-map`** (`read-workspace`): the compiler's semantic entries ordered by
|
|
@@ -8,6 +8,10 @@
|
|
|
8
8
|
- Tool groups
|
|
9
9
|
- Diagnostic repairs and refactorings
|
|
10
10
|
- Syntax-only constructs through the MCP
|
|
11
|
+
- Evidence-pinned production repairs
|
|
12
|
+
- Scoped diagnostics and completeness
|
|
13
|
+
- Dependencies and intent inventories
|
|
14
|
+
- Semantic revision comparison
|
|
11
15
|
- Source map and appended-event fixtures
|
|
12
16
|
- Revision and ownership rules
|
|
13
17
|
- Refusals are useful information
|
|
@@ -27,16 +31,17 @@ report unsupported adapters or drift.
|
|
|
27
31
|
|
|
28
32
|
## Tool groups
|
|
29
33
|
|
|
30
|
-
`
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
After `initialize` and `notifications/initialized`, discover current tools and
|
|
35
|
+
argument schemas with `tools/list`; do not hard-code counts or infer arguments
|
|
36
|
+
from these short descriptions. The additions below follow Screenplay v4.125.0's
|
|
37
|
+
`Documentation/screenplay/mcp/reference.md`.
|
|
33
38
|
The connection procedure, edit routes, identity state and failure handling are in
|
|
34
39
|
the [MCP loop](mcp-loop.md).
|
|
35
40
|
|
|
36
41
|
| Group | Tools | Intent |
|
|
37
42
|
| --- | --- | --- |
|
|
38
43
|
| Understanding | `describe-application`, `search-declarations`, `find-declaration`, `declaration-details` | Navigate logical hierarchy and inspect bounded details |
|
|
39
|
-
| References and examples | `find-references`, `dependencies`, `find-fixtures`, `find-assertion-gaps` | Inspect declared relationships and authored examples, not executed coverage |
|
|
44
|
+
| References and examples | `find-references`, `dependencies`, `dependency-graph`, `find-fixtures`, `find-assertion-gaps`, `semantic-diff` | Inspect declared relationships and authored examples, not executed coverage |
|
|
40
45
|
| Source and validation | `diagnostics`, `read-document`, `merged-document`, `syntax-schema` | Read exact source or typed structure and diagnose problems |
|
|
41
46
|
| Workspace inspection | `open-workspace`, `read-workspace`, `read-ast`, `workspace-state`, `export-workspace`, `repair-capabilities` | Obtain current identities, handles, readiness, code attachment requirements, source-map locations, durable-state status and the repair catalog |
|
|
42
47
|
| Visual (MCP-Apps hosts only) | `visualize-model` | Draw the board for the model or a `proposalId`; its `sketch` argument previews a what-if of whole documents. Reads only |
|
|
@@ -58,10 +63,11 @@ with `view: "diagnostics"`, then `view: "repairs"` at the current revision.
|
|
|
58
63
|
| Code | Offered repair and boundary |
|
|
59
64
|
| --- | --- |
|
|
60
65
|
| `PLAY0166` | Declare a missing command-produced event in its slice. Infer known command-path types (retaining concepts) or `$context.occurred` as `DateTime`; refuse uncertain/conflicting shapes, imports, existing declarations, cross-file producers and parser-invalid workspaces. |
|
|
61
|
-
| `PLAY0478` | Add `for <identifier>` to a plain production. Both models must be executable; refuse a version change or retargeting another production.
|
|
66
|
+
| `PLAY0478` | Add `for <identifier>` to a plain production. Both models must be executable; refuse a version change or retargeting another production. This changes routing: accept only if the identifier, not allocation, is intended; `canFixAll: false`. |
|
|
62
67
|
| `PLAY0471` | Remove a redundant event id only with unchanged executable model, catalog and comments. |
|
|
63
68
|
| `PLAY0469` | Remove an inline same-source identifier property and mapping, retiring its semantic address. This changes the contract; `canFixAll` is false. Refuse other consumers, opaque impact, changed routing or comment loss. Plain contracts get guidance only. |
|
|
64
69
|
| `PLAY0479` | Migrate one optional type spelling, or all in a document, preserving syntax and trivia. Exclude `query Q => observable?`. |
|
|
70
|
+
| `PLAY0516` | Move a producing sibling declaration/import before its consumer, or pin an already placed file before a retained glob. Preserve catalogs, comments, placement and executable readiness; introduce no timeline findings. Own-sub-feature edges, cycles, unranked members and mixed/different-parent boundaries have no repair. Rediscover after each move; pinned evidence is unsupported. |
|
|
65
71
|
|
|
66
72
|
These discoveries verify acceptance before listing a repair. Only compact
|
|
67
73
|
acceptance/conflict verdicts are cached on the immutable snapshot, not diagnostics,
|
|
@@ -98,22 +104,37 @@ pin, but retains a pin for a different earlier name. Contradictory generation pi
|
|
|
98
104
|
refuse the rename. Do not promise a generation-2 payload-removal repair or a
|
|
99
105
|
`PLAY0470` repair: neither is available.
|
|
100
106
|
|
|
101
|
-
VS Code and Monaco provide local optionality
|
|
102
|
-
|
|
107
|
+
VS Code and Monaco provide local PLAY0479 optionality and PLAY0471 redundant-id
|
|
108
|
+
fixes without .NET. PLAY0471 removes the whole id line; a trailing comment blocks
|
|
109
|
+
it. VS Code also has an experimental opt-in trusted C# bridge for PLAY0166/PLAY0478:
|
|
110
|
+
configure the executable/root in User settings, preview source and identity changes,
|
|
111
|
+
then explicitly confirm Apply. Dirty/untitled buffers and evidence drift refuse;
|
|
112
|
+
uncertain Apply outcomes are never retried. Restricted Mode cannot launch it.
|
|
113
|
+
Monaco has no production-repair host bridge. See v4.125.0 `vscode.md`.
|
|
103
114
|
|
|
104
115
|
## Syntax-only constructs through the MCP
|
|
105
116
|
|
|
106
|
-
|
|
107
|
-
|
|
117
|
+
The 4.66.0/4.68.0 negative probes below are historical. At 4.125.0,
|
|
118
|
+
sources/streams and command/specification routes bind as ESM v8 and have
|
|
119
|
+
catalog identities; `executionAvailable` still requires whole-workspace binding.
|
|
120
|
+
Source/stream `propose-rename` repairs bound route references. Operations and
|
|
121
|
+
exact numeric mode remain unadmitted. Check installed schemas, especially when
|
|
122
|
+
the CLI bundle predates the standalone tool.
|
|
123
|
+
|
|
124
|
+
Systems/operations remain authoring-only (PLAY0268). Sources/streams and their
|
|
125
|
+
routes are admitted v8, not syntax-only; see toolchain `references/sources-and-streams.md`.
|
|
108
126
|
`generated` properties and `returns` responses are admitted as ESM v7 by Screenplay 4.68.0 and bind
|
|
109
127
|
there (`PLAY0268` on the 4.66.0 in the cratis 3.28.x bundle). The server reads and edits them: `declaration-details` exposes `isGenerated`
|
|
110
128
|
and a command `response` view, `route` and `streams` views; `read-workspace` offers
|
|
111
129
|
the views `event-sources`, `event-streams`, `event-source-details`,
|
|
112
130
|
`event-stream-details`, `command-routes` and `event-source-diagnostics` (detail
|
|
113
|
-
views need the exact `authoringKey` from the inventory).
|
|
114
|
-
|
|
115
|
-
through typed `propose-ast`;
|
|
116
|
-
|
|
131
|
+
views need the exact `authoringKey` from the inventory). Executable availability
|
|
132
|
+
requires successful whole-workspace binding, not just an inventoried source node.
|
|
133
|
+
Discover `syntax-schema` and edit through typed `propose-ast`; source/stream rename
|
|
134
|
+
can repair proven route references on the current compiler. At 4.125.0, inline-event extraction
|
|
135
|
+
admits response-bearing commands when it proves byte-identical canonical ESM,
|
|
136
|
+
unchanged catalog assignments and exact comment preservation; responses are not
|
|
137
|
+
an automatic refusal.
|
|
117
138
|
|
|
118
139
|
For `generated`/`returns` on 4.68.0 (`mcp/reference.md` at `v4.68.0`): `propose-ast` accepts
|
|
119
140
|
`validation: "Executable"` for the admitted subset (use `"Authoring"` for full-language syntax); a
|
|
@@ -123,6 +144,85 @@ unadmitted feature. Null readiness does not prove the whole application binds or
|
|
|
123
144
|
fixture exists. Canonical `executable-model` pages include `generated`, `response`, `generatedValues`
|
|
124
145
|
and `thenReturns` when present. Form response scopes and a renderer response type remain downstream work.
|
|
125
146
|
|
|
147
|
+
## Evidence-pinned production repairs
|
|
148
|
+
|
|
149
|
+
For PLAY0166/PLAY0478, read `repair-capabilities` before opting in. Read workspace
|
|
150
|
+
`diagnostics` and `repairs`, retain their `repairEvidenceRevision`, and send
|
|
151
|
+
`pinRepairEvidence: true` with `expectedRepairEvidenceRevision` on `propose-repair`,
|
|
152
|
+
alongside workspace/catalog revisions, subject and formatting. Both evidence fields
|
|
153
|
+
are required together. The proposal retains `repairEvidence.beforeRevision` and
|
|
154
|
+
`candidateRevision`; preview every document and identity-state change. Echo the
|
|
155
|
+
before revision on `read-proposal`/`apply` if supplied; the retained pin is enforced
|
|
156
|
+
even when omitted there.
|
|
157
|
+
|
|
158
|
+
Evidence covers authoritative base/candidate attachment text and load/refusal
|
|
159
|
+
states, including missing files, not unreferenced files or implementation locks.
|
|
160
|
+
Changed inputs or loading diagnostics return `RepairEvidenceDrift`, not refreshed
|
|
161
|
+
readiness. Attachment inputs overlapping source/state/recovery writes return
|
|
162
|
+
`RepairEvidenceWriteConflict`; uncertain aliases fail closed. Never bypass these
|
|
163
|
+
refusals with text edits. A pin is a reviewed snapshot, not a crash-atomic write.
|
|
164
|
+
|
|
165
|
+
## Scoped diagnostics and completeness
|
|
166
|
+
|
|
167
|
+
`diagnostics` accepts an exact case-sensitive module/feature/slice `scope` and
|
|
168
|
+
optional `checks` (comma-separated names/codes or `all`). Unknown/ambiguous scopes
|
|
169
|
+
or check names refuse. Whole-application compilation still resolves references;
|
|
170
|
+
selection includes descendants and direct dependents, not transitive impact.
|
|
171
|
+
`success`/severity counts describe the selected set before document filtering and
|
|
172
|
+
paging; `wholeApplicationSuccess` retains the full verdict. Check `affectedScopes`
|
|
173
|
+
and coverage rather than claiming full application validity from a scoped page.
|
|
174
|
+
|
|
175
|
+
The six core structural families are `data-bindings`, `input-surfaces`,
|
|
176
|
+
`field-origins`, `query-keys`, `event-consumers`, `navigation` (PLAY0530–PLAY0537).
|
|
177
|
+
The current nine-family catalog also includes `personas`, `purposes` and
|
|
178
|
+
`privilege` (PLAY0652); discover names/codes from released `CompletenessChecks.cs`.
|
|
179
|
+
They opt into findings, not execution proof. Whole-source errors skip them; report
|
|
180
|
+
`completenessStatus` as skipped, never passed. `completenessCoverage` states their
|
|
181
|
+
limits. Continue with `expectedSourceRevision`.
|
|
182
|
+
|
|
183
|
+
## Dependencies and intent inventories
|
|
184
|
+
|
|
185
|
+
`dependency-graph` edges point consumer → producer. Views: `edges`, `cycles`,
|
|
186
|
+
`order`, `unresolved`, `declarations`; `from`/`to` select slice/feature/module
|
|
187
|
+
aggregation (`to` also accepts context). `scope`, `direction`, `kinds` and
|
|
188
|
+
`includeTestOnly` filter inferred views. Test-only `verifiedWith` edges are excluded
|
|
189
|
+
by default. Other kinds: `usesFactsFrom`, `reactsTo`, `decidesFrom`, `asks`, `shows`,
|
|
190
|
+
`outsideTheModel`. Code, expressions and property paths are not inferred.
|
|
191
|
+
|
|
192
|
+
`declarations` checks each opted-in container's own `depends on` inventory,
|
|
193
|
+
including descendant consumers. Rows retain declared/provisional/undeclared
|
|
194
|
+
coverage and declaration status used/provisional/unused/invalid. Ambiguous owners
|
|
195
|
+
are always provisional, never undeclared proof. Kind/direction/level filters do
|
|
196
|
+
not narrow this check. `evidenceLimit` (0–20, default 3) limits evidence, not counts
|
|
197
|
+
or checking. Pages default to 50, maximum 200; pin `expectedSourceRevision` on
|
|
198
|
+
continuation. Failed compilation may leave a partial graph.
|
|
199
|
+
|
|
200
|
+
Cycles and suggested order use only `usesFactsFrom`, `reactsTo`, `decidesFrom`.
|
|
201
|
+
Mixed-level cycles return no groups. Order puts producers first after removing
|
|
202
|
+
internal cycle edges, with authored ties and cycle-member order retained. It is
|
|
203
|
+
advisory, never an edit or runtime order. MCP App and VS Code boards can toggle to
|
|
204
|
+
a dependency map, with story-shaping edges by default and filters for other kinds;
|
|
205
|
+
select an edge to inspect slice pairs and reference evidence (VS Code opens source).
|
|
206
|
+
|
|
207
|
+
Workspace views `named-rule-intents`/`named-rule-intent-details` cover CommandNamedRule
|
|
208
|
+
only, including pending hints without a requirement ID. Details select either
|
|
209
|
+
`subject` or attached `requirementId`, not both. `handler-intents` and
|
|
210
|
+
`handler-intent-details` cover CommandHandler only; handler details select
|
|
211
|
+
`requirementId`. All page ordered hints, not implementation correctness. Continue
|
|
212
|
+
with `expectedRevision` and `expectedCatalogRevision`; provisional owner IDs are
|
|
213
|
+
not authoritative. Edit hints through reviewed `propose-ast`.
|
|
214
|
+
|
|
215
|
+
## Semantic revision comparison
|
|
216
|
+
|
|
217
|
+
`semantic-diff` takes `beforeWorkspaceJson` and `afterWorkspaceJson`: decoded,
|
|
218
|
+
reassembled canonical `export-workspace` JSON, not Git refs or raw source. Exports
|
|
219
|
+
must share the application identity and authoritative catalogs; the tool never
|
|
220
|
+
guesses rename continuity. Invalid exports return `UnreadableRevision`, different
|
|
221
|
+
applications `IncompatibleRevisions`. It does not open/replace the active workspace
|
|
222
|
+
or write state. Inspect incomplete sections and exclusions: structure comparison
|
|
223
|
+
is not executed behavior. Echo the ordered-pair `sourceRevision` on continuation.
|
|
224
|
+
Use `read-proposal` `view: "semantic-diff"` for an uninstalled proposal instead.
|
|
225
|
+
|
|
126
226
|
## Source map and appended-event fixtures
|
|
127
227
|
|
|
128
228
|
`read-workspace` `view: "source-map"` pages the compiler's semantic entries (ordered
|
|
@@ -132,6 +232,11 @@ span. Compilation must have succeeded for entries to exist (`available`).
|
|
|
132
232
|
`whenAppendedEventDestination` and `thenEvent` (and others for commands and
|
|
133
233
|
queries): a `when append` payload is labeled `whenAppendedEvent`, not `thenEvent`,
|
|
134
234
|
in `declaration-details`, `find-fixtures`, references and dependencies.
|
|
235
|
+
Event roles also have `…Stream`, `…StreamId` and `…NoStream` rows (`property`
|
|
236
|
+
respectively `stream`, `streamId`, `no stream`). Effective fixture values expose
|
|
237
|
+
`origin` (authored/example/override), example name and replaced value where present.
|
|
238
|
+
A whole-route replacement records `overriddenValue` once on its stream/no-stream
|
|
239
|
+
row; route parts retain their individual lineage. These are source facts, not execution.
|
|
135
240
|
|
|
136
241
|
## Revision and ownership rules
|
|
137
242
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"assertions": [
|
|
6
6
|
{
|
|
7
7
|
"kind": "skill-contains",
|
|
8
|
-
"value": "
|
|
8
|
+
"value": "Screenplay v4.125.0"
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
11
|
"kind": "skill-contains",
|
|
@@ -105,11 +105,11 @@
|
|
|
105
105
|
},
|
|
106
106
|
{
|
|
107
107
|
"kind": "skill-contains",
|
|
108
|
-
"value": "
|
|
108
|
+
"value": "registered Git worktree"
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
111
|
"kind": "skill-contains",
|
|
112
|
-
"value": "
|
|
112
|
+
"value": "schemas rather than relying on a remembered count"
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
"kind": "skill-contains",
|
|
@@ -62,7 +62,11 @@ model's behalf.
|
|
|
62
62
|
`read-workspace view=executable-diagnostics` when the mode needs them; `describe-application
|
|
63
63
|
view=summary`, `find-assertion-gaps` (slices with no assertion; authored, not executed) and
|
|
64
64
|
`dependencies direction=incoming` for orphans. The verdict lines are independent: a V1 pass is
|
|
65
|
-
necessary, never sufficient.
|
|
65
|
+
necessary, never sufficient. Opt into completeness with `--check` or MCP
|
|
66
|
+
`checks` for bindings, input surfaces, field origins, query keys, event consumers
|
|
67
|
+
and navigation; whole-source errors skip these checks. Record selected families,
|
|
68
|
+
skipped status and coverage limits, never a vacuous pass. Any line without
|
|
69
|
+
evidence is "not run: reason".
|
|
66
70
|
3. **Element sweep** (phase 1, mechanical, before any judgement). One line per gated element, event,
|
|
67
71
|
name, command, event property and slice; `references/checklist.md` S1-S7 gives each line's
|
|
68
72
|
format. Each `NONE` and each form name is its own finding naming that element. A repeated
|
|
@@ -164,11 +168,12 @@ labelled as such. The user decides whether it is enough (the user is sufficient
|
|
|
164
168
|
never blocked as a matter of authority.
|
|
165
169
|
|
|
166
170
|
## Rules
|
|
167
|
-
- Compiler contracts (defects when the mode needs them): V1 must pass with warnings
|
|
168
|
-
PLAY0029 means a construct was silently dropped.
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
171
|
+
- Compiler contracts (defects when the mode needs them): V1 must pass with warnings
|
|
172
|
+
as errors; PLAY0029 means a construct was silently dropped. Current source checks
|
|
173
|
+
warn on missing projection targets (PLAY0514) and removal/capture events
|
|
174
|
+
(PLAY0166). Opt-in field-origin warnings (PLAY0534) do not replace a manual
|
|
175
|
+
lineage walk when coverage is unknown. PLAY0516/0517 are presentation-only
|
|
176
|
+
information, not broken execution or a reason to fail warnings-as-errors.
|
|
172
177
|
- Modeling defaults (deviation needs a recorded reason, otherwise a finding): one business
|
|
173
178
|
decision, one event by default; one view per screen component; one command per `StateChange`
|
|
174
179
|
(renderable: required); facts carry decided or supplied data and running figures belong in
|
|
@@ -62,7 +62,7 @@ the problem, the checks it violates, the fix, all pinned to one declaration.
|
|
|
62
62
|
| Missing `for` | an event production (`produces <Event>` or `produces event`) without `for`. Not operation productions: they are authorable design intent, belong to commands, and take no event `for`, tags or routing | runtimes disagree on the destination | C (executable) / D | `for <identifier>` |
|
|
63
63
|
| Unbuilt read-model field | field no projection maps and AutoMap cannot fill | always empty; not reported by the compiler | D | map it or remove it |
|
|
64
64
|
| Undeclared removal/append event | `remove with` or capture `append` names an undeclared event | passes V1, fails binding (V2/V3, PLAY0273) | C (executable) / D | declare or fix the name; run V3 |
|
|
65
|
-
| Gated command invoked by a reaction | reaction `invokes` a command under a caller policy |
|
|
65
|
+
| Gated command invoked by a reaction without a declared actor | reaction `invokes` a command under a caller policy and has no `runs as system role "<Role>"` that satisfies the gate | the invocation carries no caller: rejected at run time | D (major) | declare `runs as system role "<Role>"` with the least-privilege role the gate admits (ESM v10, Screenplay 4.125.0; CLI 3.41.0 cannot render it yet, so gap-fill) or record another trusted-path decision - never just delete the gate. A matching `runs as system role` is the admitted trusted path, not a defect |
|
|
66
66
|
| `reads` + `produces` reaction | reaction both reads a view and produces | fails binding | C (executable) | invoke a command, or produce without reads |
|
|
67
67
|
| `reads` treated as protection | rule "checked" because the command or reaction `reads` a view | `reads` enforces nothing | D (major) | keep or introduce `reads <View>` + `require ... message` as stated intent, mark it NOT enforced in the slice `description`, name the target (`[ProtectedDecision]` + `DecisionRead<T>`, Chronicle DCB, or a constraint where it fits); checklist E3 |
|
|
68
68
|
| Caller-supplied state rule | `require currentStatus == "open"` where the caller sends `currentStatus` | the caller decides its own permission | D (major) | read the stored state with `reads`; keep or introduce `reads <View>` + `require ... message` as stated intent, mark it NOT enforced in the slice `description`, name the target (`[ProtectedDecision]` + `DecisionRead<T>`, Chronicle DCB, or a constraint where it fits); checklist E3 |
|