@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.
Files changed (69) hide show
  1. package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +19 -12
  2. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +4 -3
  3. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +13 -15
  4. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/cases-to-specify.md +4 -4
  5. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +21 -0
  6. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/provenance.md +4 -2
  7. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +7 -4
  8. package/package/corpus/skills/cratis-screenplay-automations-and-translations/verification.json +4 -4
  9. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +38 -36
  10. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/complete-examples.md +1 -1
  11. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/invocation-identity.md +84 -0
  12. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/refusals-and-redelivery.md +102 -0
  13. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/specifying-triggers-and-clock.md +4 -2
  14. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/verification.json +1 -1
  15. package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +28 -16
  16. package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +9 -0
  17. package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +15 -13
  18. package/package/corpus/skills/cratis-screenplay-command-surface/references/operations.md +80 -0
  19. package/package/corpus/skills/cratis-screenplay-command-surface/references/policy-persona-seed.md +23 -1
  20. package/package/corpus/skills/cratis-screenplay-command-surface/verification.json +2 -2
  21. package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +9 -6
  22. package/package/corpus/skills/cratis-screenplay-discovery/references/storming-loop.md +6 -5
  23. package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +7 -5
  24. package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +6 -5
  25. package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +39 -49
  26. package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +5 -3
  27. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +48 -8
  28. package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +44 -42
  29. package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +46 -9
  30. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +35 -11
  31. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +118 -13
  32. package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +3 -3
  33. package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +11 -6
  34. package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +1 -1
  35. package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +11 -2
  36. package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +10 -0
  37. package/package/corpus/skills/cratis-screenplay-read-surface/references/guarded-actions.md +79 -0
  38. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +9 -7
  39. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +6 -3
  40. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/verification.json +2 -2
  41. package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +3 -2
  42. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +13 -2
  43. package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +3 -2
  44. package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +3 -2
  45. package/package/corpus/skills/cratis-screenplay-slice-design/references/slicing.md +40 -0
  46. package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +24 -16
  47. package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +103 -0
  48. package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +5 -6
  49. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +4 -4
  50. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +4 -2
  51. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/verification.json +2 -2
  52. package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +34 -32
  53. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +1 -1
  54. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +47 -2
  55. package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +57 -9
  56. package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +6 -1
  57. package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +19 -10
  58. package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +4 -2
  59. package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +8 -1
  60. package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +90 -27
  61. package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +10 -6
  62. package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +29 -12
  63. package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +91 -136
  64. package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +7 -5
  65. package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +20 -0
  66. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +9 -5
  67. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +8 -1
  68. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +2 -2
  69. package/package.json +1 -1
@@ -28,12 +28,20 @@ V3 are read from the MCP server or from a render, V1 and V5 from the CLIs.
28
28
 
29
29
  | Tool | Command | Pass | Fail |
30
30
  | --- | --- | --- | --- |
31
- | Standalone (preferred) | `screenplay <model-folder> --warnaserror --no-color` | exit 0 and `N file(s) compiled - 0 error(s), 0 warning(s)` | exit 1 |
31
+ | Standalone 4.125.0 (preferred) | `screenplay <model-root> --warnaserror --no-color` | exit 0 and a nonzero compiled file count | exit 1 defects; exit 2 could not run/invalid arguments or input |
32
32
  | cratis (fallback) | `cratis screenplay validate <model-folder> --warnings-as-errors -o json-compact` | exit 0 | exit 5; exit 1 means missing path or no files |
33
33
 
34
- - Always validate the **folder**. cratis file mode ignores imports (cli#244); the standalone
35
- tool follows them, but a folder run is the same on both tools.
36
- - An empty folder exits 0 on the standalone tool: read the file count.
34
+ - Validate the complete application root, not an independently selected fragment.
35
+ Standalone file mode follows imports; folder mode includes all files. The CLI
36
+ file-import limitation below was a 3.28.2 probe, not a current tool claim.
37
+ - Require a nonzero file count; empty input is not a model-validation pass.
38
+ - Optional `--scope <Module.Feature.Slice>` compiles the whole application but
39
+ reports descendants and direct dependent declarations, not transitive impact.
40
+ Exit/`--warnaserror` apply to that reported set; inspect the separate whole
41
+ application counts before a whole-model claim. Unknown/ambiguous scopes exit 2.
42
+ - `--check <names>` (repeatable) or `--check all` opts into completeness warnings
43
+ PLAY0530–PLAY0537. Whole-source errors skip them; a skipped check is not passed.
44
+ Names/codes, coverage limits and editor support: `diagnostics.md`.
37
45
  - Warnings are failures here. PLAY0029 (a construct dropped silently) and the unresolved-name
38
46
  warnings are the defects this verdict exists to catch.
39
47
  - Syntax and consistency checks (PLAY0282 to PLAY0294) run; binding does not.
@@ -75,14 +83,21 @@ never "specifications pass".
75
83
  - A blocked V3 is not repaired by deleting protection or domain rules. Never remove `@pii`,
76
84
  `@sensitive`, authorization, list queries, automations or rules to reach V3; record the
77
85
  slice and the code in the gap list.
78
- - A model is "executable" only on the compiler that bound it. A V3 from the standalone tool
79
- does not carry to `cratis render`: Stage admits ESM v1 to v4 only on 4.24.2 (v1 to v3 on 4.24.1, bundled by cratis 3.28.2; cratis 3.28.3 bundles 4.24.2; evolved events are STAGE-ESM-026) (and on cratis before 3.28.2 the bundled 4.60.1 binder, ESM v1 to v5, refused v6 first; the 4.66.0 bundled by cratis 3.28.x refuses ESM v7 generated values and responses at binding with `PLAY0268`).
86
+ - A model is executable only on the compiler that bound it. V3 does not carry
87
+ to render admission: CLI 3.41.0 passes up to ESM v7 to Stage, refuses newer
88
+ models with CLI-RENDER-004, and its v7 corpus receives STAGE-ESM-028/029.
89
+ The old 3.28.x/Stage 4.24.x probes remain historical in the subset references.
80
90
 
81
91
  ## V4: reference specifications run
82
92
 
83
- No MCP tool and no compile command runs specifications (Screenplay#377 is open). V4 comes
84
- only from an actually executed Screenplay **reference** route. Record the route, the expected
85
- versus discovered specification count, and passed, failed, unsupported and cancelled counts.
93
+ Run `screenplay test <root> [--filter <exact-address>] [--format text|json]` on
94
+ 4.125.0, or MCP `run-specifications`. The compile command alone still does not
95
+ execute scenarios. Reference execution is in-memory: no external services or
96
+ opaque code run. Record route, expected versus discovered/selected counts,
97
+ passed, failed and unsupported outcomes. Exit 0 means all selected passed; 1
98
+ failed, 2 could not run/invalid input or selection, 3 unbound or unsupported.
99
+ Unknown filters refuse rather than select zero. No discovered specifications
100
+ is not proof of coverage.
86
101
  The reference runner returns unsupported for a specification that reads a reducer-built read
87
102
  model and for any construct whose evaluation needs an opaque body.
88
103
 
@@ -133,9 +148,11 @@ source change makes earlier verdicts stale.
133
148
 
134
149
  ## Example gate (for skill and documentation authors)
135
150
 
136
- Every complete `screenplay` fence in this corpus compiles with the standalone tool at the
137
- pin and `--warnaserror`. Every such fence also passes `cratis screenplay validate
138
- --warnings-as-errors` (3.28.2, bundling the same compiler) on a folder holding that one file.
151
+ Historical corpus fences were checked with standalone 4.68.0 and CLI 3.28.2.
152
+ Do not promote those results to current pins without rerunning. Check each changed
153
+ complete fence with standalone 4.125.0 `--warnaserror`; run `screenplay test` for
154
+ specification examples, and verify expected-diagnostic examples against their
155
+ claimed codes. Where bundle compatibility matters, also check CLI 3.41.0.
139
156
  The `// Needs the standalone screenplay compiler (ESM v6)` first-line marker belonged to cratis
140
157
  before 3.28.2, which could not validate those fences; no fence carries it now, and a
141
158
  checker that still skips marked fences under `cratis` skips nothing. Examples meant to execute are also opened through MCP and
@@ -4,159 +4,114 @@
4
4
 
5
5
  - Pin set
6
6
  - Two compilers, one rule
7
- - Standalone `screenplay` 4.68.0
8
- - cratis 3.28.3 and 3.28.2 (Screenplay 4.66.0)
9
- - Event sources and streams
10
- - MCP roots bug (4.63.1 and earlier; fixed in 4.63.2; not present in cratis 3.28.2)
7
+ - Commands and exit codes
8
+ - Admission boundaries
9
+ - Historical probes
11
10
  - Revisions and descriptions
12
- - Roadmap items that would change a verdict (all open at the pin; the `@sensitive` meaning, Screenplay#384, and the identifier refusal and C# mapping, Stage#197, are settled in decision 0034; the pinned tools predate `PLAY0515`)
13
11
  - Upgrade checklist
14
12
 
15
- Every other Screenplay skill and reference points here instead of repeating a version
16
- or a tool capability. When a tool changes, update this file first, then re-run the
17
- example compile gate with both tools (see `verdicts.md`, "Example gate").
18
-
19
- Pinned and re-verified against product source on 2026-10-07 (standalone Screenplay 4.68.0); the cratis CLI rows were
20
- re-probed on cratis 3.28.2 and 3.28.3 (Screenplay 4.66.0 bundled in both). Facts marked
21
- *source* were read with `git show <tag>:<path>`; facts marked *probed* were run against the
22
- installed tool.
23
-
24
13
  ## Pin set
25
14
 
26
- | Source | Pin | Notes |
15
+ Use the released versions below. A source-checked capability is not a runtime
16
+ probe; older probes retain their original labels in the other references.
17
+
18
+ | Source | Pin | Evidence |
27
19
  | --- | --- | --- |
28
- | Screenplay (language, compiler, standalone tool, MCP server) | **v4.68.0** (`79801bf`), published as `Cratis.Screenplay.Tool` 4.68.0 | 4.67.0 changed only the MCP model-root defaults (no project: `Documents/Screenplay`; with a project root: the folder holding the `.play` files, else `Source` or `src`, else `Screenplay`). 4.68.0 admits **ESM v7**: generated command values and responses bind and execute (decision 0026, `Semantics/Versions.cs`; `generated-responses-example.md`); the existing compiled examples were recompiled on 4.68.0 with the same results as on 4.66.0. Most other behaviour below was probed on 4.63.1 (`7769dc4`) and re-checked on 4.66.0. 4.63.1 to 4.64.0 added only the `numbers exact` syntax (binding refuses it), the MCP roots fix from 4.63.2 and fence-registry plumbing. 4.65.0 adds the command named-rule `implementation` block and rejects `implementation` on concept rules, built-in property rules and whole-command `require`/`validate` bodies (a hints-only block binds as PLAY0268). 4.66.0 adds only an experimental VS Code repair bridge. `Semantics/Execution` was unchanged from 4.63.1 through 4.66.0 (historical; 4.68.0 adds generated-value execution). Example compile and the toolchain commands in this skill were run on 4.66.0 |
29
- | cratis CLI | **v3.28.3** (`8b43fef`, Cratis/cli#260) | Bundles **Screenplay 4.66.0** (ESM v1 to v6; it does not bind ESM v7, so `generated` and `returns` report `PLAY0268` there), **Stage 4.24.2**, `Cratis.Arc.Screenplay` 22.50.5, Chronicle 19.32.0, Fundamentals 7.22.8, Generation 0.18.0 (`Directory.Packages.props` at the tag): otherwise as v3.28.2, so Screenplay behaviour is identical. `cratis render` no longer emits `CLI-RENDER-003`; an evolved event is reported with Stage's `STAGE-ESM-026` (`ScreenplayPlanning.cs` at the tag; probed). v3.28.2 (`141c499`, Cratis/cli#257, closes #253) bundled Stage 4.24.1 and the same Screenplay. The bundled 4.66.0 compiler agrees with standalone 4.66.0 on binding and diagnostics for ESM v1 to v6 but not with standalone 4.68.0 (ESM v7); the two also differ on file-mode imports. v3.28.1 and earlier (including v3.28.0 and the probed v3.27.1) bundled Screenplay 4.60.1 and Stage 4.24.0 (ESM v1 to v5, MCP roots bug, false PLAY0285, Automation/Translate refused at binding) |
30
- | Stage | **v4.24.2** (`32dcac4`, Cratis/Stage#205, closes #165) | Admits ESM v4: initial-revision events render as before, any evolved event and its dependent scope is refused with `STAGE-ESM-026`, historical typed-context references with `STAGE-ESM-025`; migration rendering is Stage#204 (needs Screenplay#71); v5 and later, including v7 (generated values and responses; tracked in Stage#201), stay `STAGE-ESM-016`; the Host runtime still refuses evolved events. The cratis CLI bundles it since 3.28.3; 3.28.2 bundled 4.24.1 (v4.24.1, `2cadf59`: below). Pins Screenplay 4.66.0, Arc 22.50.5 and Chronicle 19.32.0 for its own build and the sandbox host image (`cratis/chronicle:19.32.0-development`); admits ESM schema v1 to v3 at 4.24.1 (v4.24.0, `fa48546`, pinned Screenplay 4.60.0); bundled by cratis 3.28.2. 4.24.1 adds `STAGE-ESM-024` to the surface ledger only; no admission change. The scaffold profile is unchanged at 4.24.1: rendered apps use .NET 10, **Arc 22.25.0**, **Chronicle 19.8.1** and a React/Vite frontend scaffold (Components 4.14.0, Scene 4.2.0) |
31
- | Arc | **v22.50.5** (`eefd098`) | `[ExecuteCommandsAsSystem]` since v20.56.0; `[ProtectedDecision]` and `DecisionRead<T>` since v22.39.0. A Stage-rendered application is on 22.25.0, so `[ProtectedDecision]` is **not** available there |
32
- | Chronicle | **v19.32.0** (`f17a2ff`) | CHR0012 (`EventTypeShouldAvoidNullableProperties`) and CHR0034 (`PiiOnEventSourceId`) exist. Open runtime defects at v19.32.0: #3744 (unique claims not settled by the store on SQL and InMemory), #4123 (constraint index updates run after commit and fail silently), #4131 (composite unique constraints collide when a component contains the separator) |
33
-
34
- Install or update the standalone tool: `dotnet tool update -g Cratis.Screenplay.Tool`
35
- (first install: `dotnet tool install -g Cratis.Screenplay.Tool`). Check what is on the
36
- machine before relying on any row: `screenplay --version`, `cratis --version`, and MCP
37
- `initialize` -> `serverInfo.version`. A stale `cratis` earlier on `PATH` (for example a
38
- global `dotnet` tool) shadows a newer one; confirm with `which -a cratis`.
20
+ | Screenplay language, standalone tool and MCP | **4.125.0** (`4d818eb`) | Released tag `v4.125.0`; installed `screenplay --version` and `--help` |
21
+ | cratis CLI | **3.41.0** | Released tag `v3.41.0`; installed `cratis --version` |
22
+ | Screenplay bundled by CLI | **4.114.0** | CLI `v3.41.0:Directory.Packages.props` |
23
+ | Stage bundled by CLI | **4.51.3** | Same file; the CLI's runtime image follows its Stage package version |
24
+ | Cratis.Arc.Screenplay bundled by CLI | **22.54.0** | Same file; this is the generator package, not a blanket rendered-app dependency pin |
25
+ | Chronicle / Fundamentals bundled by CLI | **19.32.0 / 7.22.8** | Same file |
39
26
 
40
- ## Two compilers, one rule
27
+ Check the actual executable before relying on this table: `screenplay --version`,
28
+ `cratis --version`, MCP `initialize` → `serverInfo.version`. An older executable
29
+ on PATH can shadow a newer install; inspect `which -a cratis`.
41
30
 
42
- | | Standalone `screenplay` | `cratis screenplay ...` |
43
- | --- | --- | --- |
44
- | Version | 4.68.0 (this pin) | 3.28.3 or 3.28.2, bundling Screenplay 4.66.0 (3.28.1 and earlier bundled 4.60.1) |
45
- | ESM admitted by the binder | v1 to v7 (v6: clocks, application triggers, captures, reactions, Automation and Translate slices; v7: generated command values and responses) | v1 to v6 (3.28.3 bundles 4.66.0, so `generated` and `returns` fail binding with `PLAY0268`), the binder of 4.66.0 (probed on 3.28.2: the Automation, Translate and capture examples of this corpus are `executableReady` over `cratis screenplay mcp`) |
46
- | `numbers exact` | syntax parses; binding refuses (PLAY0268, `executableReady: false`). Absent from the grammar page; documented only in `diagnostics.md` (PLAY0508 to PLAY0513) | same (probed on 3.28.2; 3.27.1 reported PLAY0001 "Unexpected 'numbers'") |
47
- | Cascade specs (a command spec listing events a reaction appends) | compiles | compiles on 3.28.2 (probed); before 3.28.2 reported a **false PLAY0285** (cli#242, still open on GitHub at the time of writing) |
48
- | Imports in file mode | follows imports | still ignores imports, reports false unknown-name warnings (PLAY0165, cli#244, open; probed on 3.28.2): validate the folder |
49
- | Used for | V1, V2, V3; MCP | `render`, `screenplay generate`, `prologue`, `run`; V1, V2 and V3 as well, with its bundled 4.66.0 compiler (cratis 3.28.3), which lacks ESM v7 that standalone 4.68.0 admits |
50
-
51
- **Routing rule.** With cratis 3.28.2 or later both tools compile and bind the same
52
- models up to ESM v6 (the cratis bundle is Screenplay 4.66.0, the standalone pin 4.68.0), so either gives V1 to V3 for models up to v6; a model with generated values or responses (ESM v7) binds only with the standalone tool. Prefer the standalone tool when it is installed (file mode
53
- follows imports); `cratis` is the route for rendering (V5), generation and Prologue. Projects
54
- set up by `cratis ai install` register `cratis screenplay mcp`, which runs the bundled
55
- compiler: on cratis 3.28.1 or earlier (all releases before 3.28.2) that is 4.60.1 and lags (ESM v5, false PLAY0285,
56
- roots bug), so read `cratis --version` first. **Name the tool and its version with every
57
- verdict**; a verdict from one tool does not carry to the other when their versions differ.
58
-
59
- ### Exact messages that tell the tools apart
60
-
61
- Only binding (MCP or `render`) prints these; neither `screenplay <folder>` nor
62
- `cratis screenplay validate` binds. *source*: `Semantics/Versions.cs`,
63
- `SemanticModelBinder.Structure.cs`, `SemanticModelBinder.SliceMembers.cs`,
64
- `SemanticModelBinder.Specifications.cs`.
65
-
66
- | Construct | cratis before 3.28.2 (Screenplay 4.60.1) reported (PLAY0268) | 4.66.0 to 4.68.0, standalone and cratis 3.28.2 |
67
- | --- | --- | --- |
68
- | Automation or Translate slice | `Slice '<name>' of type '<type>' is not admitted by ESM v1.` | binds as ESM v6 |
69
- | Reaction | `Reaction '<n>' requires portable occurrence and effect semantics.` | binds |
70
- | Capture | `Capture '<n>' requires a portable compiled CDL plan.` | binds |
71
- | Generated property, `returns` response, generated fixture or `then returns` | `PLAY0268` | `PLAY0268` on 4.66.0 and 4.67.0 (so on every cratis 3.28.x bundle); binds as ESM v7 from 4.68.0 (standalone only) |
72
- | Clock, trigger or capture specification | `... which the executable model does not admit yet - clocks, application triggers and capture records are proposed for ESM v6 in decision 0022.` | binds |
31
+ ## Two compilers, one rule
73
32
 
74
- The substring "is not admitted by ESM v1" still appears on 4.66.0 for constraints,
75
- expressions and projection blocks that the binder cannot represent, so that text alone does
76
- not prove an older compiler: read the construct it names. A v6 model that still fails binding
77
- on 4.66.0 names a different construct, for example a reaction that reads a view before
78
- producing directly (decision 0006).
33
+ Standalone Screenplay 4.125.0 and the CLI's 4.114.0 bundle are different releases.
34
+ Prefer standalone for the current language checks; CLI owns generation, Prologue
35
+ and rendering. Name the tool/version with every verdict. No verdict transfers
36
+ between differing compilers without checking the same inputs there.
79
37
 
80
- ## Standalone `screenplay` 4.68.0
38
+ A folder compiles as one application. A standalone file includes its imports,
39
+ not unimported siblings. Keep the application root as input for scoped checks.
40
+ Do not treat a clean fragment or scoped result as whole-application success.
81
41
 
82
- | Fact | Value | Evidence |
83
- | --- | --- | --- |
84
- | V1 command | `screenplay <file.play or folder> --warnaserror --no-color`. No `validate` verb, no JSON output. Text lines `file(line,col): severity PLAYnnnn: message` and a summary `N file(s) compiled - E error(s), W warning(s)` | `--help`, probed |
85
- | Exit codes | 0 pass; 1 on errors, on warnings with `--warnaserror`, or on a missing path. Warnings without `--warnaserror` exit 0; information never fails. **An empty folder prints "No .play files found beneath ..." and exits 0**: check the summary's file count | probed |
86
- | File versus folder | file mode follows imports (`app.play` importing `Shared/*.play` compiled 2 files). A folder is one application | probed |
87
- | MCP | `screenplay mcp <model-folder>` (fixed root) or `screenplay mcp` (dynamic root). Protocol `2025-06-18`; 29 tools (30 on hosts that advertise the MCP-Apps UI extension: adds `visualize-model`). Needs `notifications/initialized` before tool calls (otherwise -32600 "Initialize and send notifications/initialized before using tools."). Refuses symlinked paths ("Symbolic links and reparse points are not admitted"): pass a physical path (on macOS `/tmp` is a symlink) | source `McpToolCatalog.cs`, `McpConnection.cs`; probed on 4.63.1 |
88
- | `read-workspace` views | `documents`, `semantics`, `eventContracts`, `diagnostics`, `executable-diagnostics`, `implementation-requirements`, `handler-intents`, `source-map`, `typed-contexts`, `executable-model`, `repairs`, and the event-source, event-stream and command-route views. `executable-model` returns `available:false` unless the model binds; when it binds it carries `modelRevision` (`rev1:<sha256>`), `languageVersion`, `semanticVersion` and `attachmentManifestRevision` | source `McpToolSchemas.cs`, `McpWorkspaces.Reading.cs` |
89
- | Empty root | `state: "empty"`, `authoringAccepted: true`, PLAY0289 | probed |
90
- | Pin of the roots bug | fixed (from 4.63.2); see "MCP roots bug" below | source `McpConnection.cs` |
42
+ MCP server launch: `screenplay mcp <model-root>` or
43
+ `cratis screenplay mcp <model-root>`. Discover `tools/list`, views and schemas
44
+ rather than counting tools. Connection, worktree switching and root-state
45
+ conflicts: `cratis-screenplay-model-authoring`.
91
46
 
92
- ## cratis 3.28.3 and 3.28.2 (Screenplay 4.66.0)
47
+ ## Commands and exit codes
93
48
 
94
- | Fact | Value | Evidence |
49
+ | Layer | Route | Verdict |
95
50
  | --- | --- | --- |
96
- | V1 command | `cratis screenplay validate <folder> --warnings-as-errors -o json-compact` | `--help`, probed |
97
- | Exit codes | 0 pass; 5 errors (or warnings with `--warnings-as-errors`); 1 path missing **or no `.play` files**. Information never fails | probed |
98
- | Output | JSON lines: a `diagnostics` array with `severity`, `code`, `message`, `location`, then either `{"path","files","diagnostics":N}` (N counts information too) or an error object. A passing folder run prints the file count | probed on 3.28.2 |
99
- | File versus folder | file mode compiles one document and **ignores imports** (cli#244). Validate the folder | probed |
100
- | MCP | `cratis screenplay mcp <root>`, or no argument inside a project: the server locates the model itself (existing `.play` files, else `Source/`/`src/`, else a new `Screenplay/` folder) unless `.cratis/ai.json` sets `mcpServers.screenplay.root`; 29 tools and the same `read-workspace` views as the standalone tool, including `event-sources`, `event-streams` and `command-routes` (probed on 3.28.2; the 4.60.1 bundle had no such views). Fails fast only when an explicitly configured root does not exist | source `ScreenplayMcpRoot.cs:20-37` |
101
- | Render | `cratis render` binds with the bundled compiler first, then the bundled Stage (4.24.2 since 3.28.3; 4.24.1 in 3.28.2) admits; a v6 model reaches Stage and is refused whole with `STAGE-ESM-016` (probed on 3.28.2), and an evolved event is `STAGE-ESM-026` with no `CLI-RENDER-003` (probed on 3.28.3). See `renderable-subset.md` | source, probed |
102
- | `prologue interpret` | no `--no-llm` flag; LLM resolution and `screenplay generate` flags were checked on 3.27.0 and are unchanged in 3.28.2 (`--help` shows no `--no-llm`; the Prologue and Screenplay generate sources have no diff between the tags) | source, probed |
103
-
104
- ## Event sources and streams
105
-
106
- Declared since Screenplay v4.62.0 but not bound: PLAY0268, "not admitted by any supported
107
- executable model (ESM) version yet" (Screenplay 4.68.0, `SemanticModelBinder.CommandProductions.cs`; the
108
- highest admitted version is v7). Stage 4.24.0 and 4.24.1 admit ESM v1 to v3 and refuse with
109
- STAGE-ESM-016; Stage 4.24.2 admits v4 and refuses v5 and later (v6 reactions and clocks, v7 generated values and responses) with STAGE-ESM-016 (4.24.1 also records the v6 members as rejected `STAGE-ESM-024` in its ledger; users still see STAGE-ESM-016). Details and trackers: `sources-and-streams.md`.
110
-
111
- ## MCP roots bug (4.63.1 and earlier; fixed in 4.63.2; not present in cratis 3.28.2)
112
-
113
- A dynamic-root server (`screenplay mcp` with no folder) asks a roots-capable client for
114
- `roots`, reads the wrong field and replies with an error whose `id` is `null`; real hosts
115
- treat that as fatal. It happens right after `notifications/initialized`, before any tool
116
- call, and only when the root is dynamic. **Passing `open-workspace.path` does not avoid
117
- it.** Avoid it with a fixed root: `screenplay mcp <model-folder>`, `cratis screenplay mcp
118
- <path>`, or `cratis screenplay mcp` inside a project with `.cratis/ai.json`; or use 4.63.2
119
- or later. cratis before 3.28.2 bundled 4.60.1, which has the bug, so only the fixed-root
120
- forms were safe there. Probed on cratis 3.28.2 (Screenplay 4.66.0): with a roots-capable
121
- client and no fixed root, `cratis screenplay mcp` answers `initialize`, sends a well-formed
122
- `roots/list` request, and serves `tools/list` (29 tools) after the client replies; no `id: null`
123
- error appears. A fixed root is still the simplest way to avoid any host differences.
124
- MCP loop procedure and proposals: `cratis-screenplay-model-authoring`.
51
+ | Source validation | `screenplay <root> --warnaserror --no-color` | 0 clean; 1 reported defects; 2 could not run/invalid arguments or input. `--scope` limits the reported set, not compilation |
52
+ | Completeness | Add `--check <name>[,<name>]` (repeatable) or `--check all` | Opt-in warnings; whole-source errors skip checks, not pass them |
53
+ | CLI source validation | `cratis screenplay validate <root> --warnings-as-errors -o json-compact` | Read producer exit and JSON errors/warnings/file count. Passing source-only probe on CLI 3.41.0: dependencies example, exit 0 |
54
+ | Binding | MCP workspace readiness and `executable-diagnostics` | V2 reads diagnostics; V3 requires binding with no blocking diagnostics |
55
+ | Reference specifications | `screenplay test <root> [--filter <address>] [--format text|json]`, or MCP `run-specifications` | 0 all selected passed; 1 failed; 2 could not run/invalid selection; 3 unsupported or unbound. Counts of zero do not prove coverage |
56
+ | Rendering | `cratis render` | Separate admission, publication, target build and target tests (V5) |
57
+
58
+ Source validation does not bind or run attached code. Reference execution is
59
+ in-memory and does not run opaque attachments or external services. CLI-derived
60
+ specification IDs need not match persisted MCP identities after renames; use MCP
61
+ for identity-stable selection.
62
+
63
+ ## Admission boundaries
64
+
65
+ Screenplay `v4.125.0:Source/DotNET/Screenplay/Semantics/Versions.cs` supports schema
66
+ pairs through v10. Generated values/responses and policy negation select v7;
67
+ sources/streams and command/specification routes select v8; reaction
68
+ `runs as system [role "<Role>"]` selects v10 and reference-executes on 4.125.0.
69
+ The checked trusted-actor scenario is in captures-and-reactions
70
+ `references/invocation-identity.md`. CLI 3.41.0's 4.114.0 compiler rejects its
71
+ source with PLAY0137 (validation probe, exit 5). Stage 4.51.3's direct planner
72
+ uses EsmSchemaV7Support and refuses v10 with STAGE-ESM-016; CLI's version gate
73
+ separately refuses above v7 with CLI-RENDER-004. A source construct
74
+ still requires explicit binder/runner/provider admission: operations, exact
75
+ numeric mode and reaction refusals/redelivery remain authorable but unadmitted
76
+ (`PLAY0268`). Never delete those contracts to obtain a green bind.
77
+
78
+ CLI 3.41.0 `RenderedSemanticVersions.Newest` is **v7**:
79
+ `Source/Cli/Commands/Render/RenderedSemanticVersions.cs`. Models above it get
80
+ `CLI-RENDER-004` before planning/publication. v7 generated values/responses reach
81
+ Stage admission; they are not universally refused until CLI#261. That issue is
82
+ closed. Each unsupported construct still needs a Stage diagnostic, not a silent
83
+ omission or inferred support from package versions.
84
+
85
+ The renderable-subset and Stage references retain older probes explicitly;
86
+ read them as tested snapshots, not as a claim that Stage 4.51.3 shares every
87
+ 4.24.2 limitation. Query the actual bundled renderer before a V5 claim.
88
+
89
+ ## Historical probes
90
+
91
+ - Screenplay 4.68.0 admitted v7; CLI 3.28.2/3.28.3 bundled 4.66.0 (v6 at most),
92
+ Stage 4.24.1/4.24.2. Those old negative v7 probes do not describe CLI 3.41.0.
93
+ - CLI before 3.28.2 bundled Screenplay 4.60.1: false cascade PLAY0285, v6 refusal
94
+ and dynamic-root initialization bug. The roots bug was fixed in 4.63.2.
95
+ - CLI 3.28.2 file validation ignored imports; this is an old probe, not a current
96
+ reason to invent missing declarations. Validate the complete root.
97
+ - Older standalone empty-folder probes exited 0. Current validation still needs
98
+ a nonzero file count, and specification execution needs an expected selection.
125
99
 
126
100
  ## Revisions and descriptions
127
101
 
128
- - `modelRevision` exists only when the model binds; design-only models have none. It is stable
129
- across reopens, but it **changes when the root folder is renamed** and no
130
- `.screenplay/identities.json` exists, because the application identity is bootstrapped
131
- from the root. A file move changes it only if it changes logical placement or application
132
- identity. It is computed from canonical semantic JSON (descriptions and source locations live
133
- in the separate source map), so line positions and description edits do not change it. A
134
- workspace or source revision can change without a `modelRevision` change. Re-read after every edit.
135
- - `cratis render` records its own `semanticRevision` in `.cratis-render.json`, computed with
136
- the `--name` identity and the bundled compiler. **Never compare the MCP `modelRevision`
137
- with a render manifest.** Drift is detected by comparing successive `semanticRevision`
138
- values from renders made with the same name and inputs (probed on 3.28.2: the same model
139
- rendered as `Marina` and as `Harbour` gives different values). Unverified: whether 4.60.1
140
- and 4.66.0 produce byte-identical `rev1` values for the same v1 to v3 model.
141
- - Source identity for a verdict is the commit plus the digest from
142
- the source-identity helper (`cratis-screenplay-modeling-lifecycle` `references/verdicts-and-modes.md` "Source identity"). Keep it apart from the MCP `modelRevision`.
143
- - `description` and `documentation` never reach rendered code (Stage#178, open).
144
-
145
- ## Roadmap items that would change a verdict (all open at the pin; the `@sensitive` meaning, Screenplay#384, and the identifier refusal and C# mapping, Stage#197, are settled in decision 0034; the pinned tools predate `PLAY0515`)
146
-
147
- Screenplay#377 (run specifications from MCP or the tool), #388 (completeness and lineage
148
- report), #383 (identity for an `invokes` caller), #379 (`visualize-model` counts reactions); Stage#79 (render Automation and
149
- Translate slices), Stage#165 (admit ESM v4); cli#242 (false PLAY0285 on the 4.60.1 bundle; fixed in effect by the 4.66.0 bundle but still open on GitHub), cli#243 (`validate --executable`),
150
- cli#244 (file mode ignores imports), cli#245 (`render --check`). The standalone tool at
151
- 4.68.0 has only the compile command and `mcp` (no `test`; `screenplay --help` checked); the reference runner is library
152
- only. Until these land, "specifications written" or "bound" is never "specifications
153
- pass".
102
+ `modelRevision` exists only when binding succeeds; it is canonical semantic
103
+ identity, not source identity. Source positions and report-only metadata can
104
+ change source/workspace revisions without changing it. Persisted catalogs
105
+ preserve assigned identities; do not reconstruct them from names.
106
+
107
+ A render manifest's `semanticRevision` is a different provenance value, made
108
+ with the render name and bundled compiler. Do not compare it directly to MCP
109
+ `modelRevision`. Compare successive renders with the same identity and inputs.
154
110
 
155
111
  ## Upgrade checklist
156
112
 
157
- 1. `screenplay --version`, `cratis --version`; note whether `cratis` bundles a newer
158
- Screenplay (then the routing rule collapses).
159
- 2. Update the pin table, the two-compiler table and the message table above.
160
- 3. Re-run the example compile gate with both tools; re-probe one binding example through
161
- MCP.
162
- 4. Check whether a `screenplay test` or `cratis screenplay test` exists (a V4 route).
113
+ 1. Read installed versions and released dependency pins.
114
+ 2. Check source, binder, reference runner and renderer admission separately.
115
+ 3. Compile each changed example; execute specification examples with the
116
+ reference route. Preserve explicit expected-diagnostic checks.
117
+ 4. Re-probe affected capabilities before replacing a historical version label.
@@ -9,15 +9,17 @@
9
9
  { "kind": "skill-contains", "value": "4.68.0" },
10
10
  { "kind": "skill-contains", "value": "4.66.0" },
11
11
  { "kind": "skill-contains", "value": "references/generated-responses-example.md" },
12
- { "kind": "skill-contains", "value": "not admitted by any supported ESM version" },
13
- { "kind": "skill-contains", "value": "generated values and responses (ESM v7: Stage refuses it with `STAGE-ESM-016`, tracked in Stage#201)" },
12
+ { "kind": "skill-contains", "value": "Operations and exact numeric" },
13
+ { "kind": "skill-contains", "value": "Stage generated-value/response refusals `STAGE-ESM-028`/`029`" },
14
14
  { "kind": "skill-contains", "value": "cratis screenplay validate" },
15
15
  { "kind": "skill-contains", "value": "cli#244" },
16
16
  { "kind": "skill-contains", "value": "`notifications/initialized`" },
17
17
  { "kind": "skill-contains", "value": "A handler never binds" },
18
18
  { "kind": "skill-contains", "value": "references/sources-and-streams.md" },
19
- { "kind": "skill-contains", "value": "STAGE-ESM-016" },
20
- { "kind": "skill-contains", "value": "STAGE-ESM-026" },
21
- { "kind": "skill-contains", "value": "authorable and validatable" }
19
+ { "kind": "skill-contains", "value": "CLI-RENDER-004" },
20
+ { "kind": "skill-contains", "value": "PLAY0514" },
21
+ { "kind": "skill-contains", "value": "bind as ESM v8" },
22
+ { "kind": "skill-contains", "value": "PLAY0530/0531", "file": "references/diagnostics.md" },
23
+ { "kind": "skill-contains", "value": "Editor versus C# verdicts", "file": "references/diagnostics.md" }
22
24
  ]
23
25
  }
@@ -7,6 +7,7 @@
7
7
 
8
8
  - Support levels
9
9
  - Data context and component bindings
10
+ - Guarded actions
10
11
  - Exposed template configuration
11
12
  - Forms and columns
12
13
  - Packages, icons and template catalogs
@@ -91,6 +92,25 @@ Rules for agents:
91
92
  can be targeted by navigation or a dialog route when the runtime contract
92
93
  supports it.
93
94
 
95
+ ## Guarded actions
96
+
97
+ A label-headed screen action can select one command through authored-order
98
+ `when item.<path> ... execute ...` alternatives. First match wins; last
99
+ `otherwise execute` supplies a fallback, while `otherwise hidden` or omission
100
+ hides an unmatched action. With no item (loading/no selection), always hide it.
101
+ Explicit with-bindings, matching subject fields, form inputs and renderer input
102
+ fill the chosen command in that order. Authorization denial is not another
103
+ selector and never falls through. Refresh if a click-time check changes the
104
+ choice the user saw.
105
+
106
+ Missing fields are not null; == null matches explicit null only. Guards are
107
+ presentation offers, never access control. Downstream runtime support is separate
108
+ from parsing; do not publish an empty plain action as equivalent behavior.
109
+ The complete checked model and conditions are in
110
+ `cratis-screenplay-read-surface` `references/guarded-actions.md`, grounded in
111
+ Screenplay v4.125.0 `screens.md`. CLI 3.41.0/Stage 4.51.3 reports unsupported
112
+ screen actions with STAGE-SCENE-ACTION-001, not proof of runtime selection.
113
+
94
114
  ## Exposed template configuration
95
115
 
96
116
  Reusable templates can expose configuration and typed outlets:
@@ -133,12 +133,16 @@ Facts that surprise:
133
133
  - `cratis render` and `cratis screenplay validate` are different gates: a model can
134
134
  validate and still refuse here.
135
135
 
136
- ## What Stage 4.24 admits
136
+ ## Historical Stage 4.24 admission
137
137
 
138
- A model using `eventsource`, `stream` or command routes is refused (`STAGE-ESM-016`), and
139
- rendered appends never carry event source type, event stream type or event stream id, so
140
- Chronicle's defaults apply (Stage#177, #200, #201; Screenplay#407). Gap-fill the routing by
141
- hand; see `cratis-screenplay-toolchain` `references/sources-and-streams.md`.
138
+ Current pins are standalone Screenplay 4.125.0 / CLI 3.41.0 / Stage 4.51.3.
139
+ Routes bind/reference-execute as v8; reaction `runs as` identity as v10.
140
+ CLI renders through v7 only (CLI-RENDER-004 for newer model versions) and its
141
+ older 4.114.0 parser rejects `runs as` (PLAY0137). Stage 4.51.3's direct planner
142
+ also audits only through v7 (STAGE-ESM-016 otherwise). Source/identity contracts
143
+ stay intact for gap-fill; source acceptance is not target admission.
144
+
145
+ The following detailed 4.24.x probes are historical, not current pin claims.
142
146
 
143
147
  Whole-model admission needs ESM schema v1 to v4; v5 and v6 are `STAGE-ESM-016`. Stage 4.24.2 admits ESM v4 (Screenplay compiles a model with evolved events to v4): an event at its initial revision renders exactly as before, but any selected event above the initial revision, and every scope depending on it (a command producing it, a projection or reducer observing it, a specification using it), is refused with `STAGE-ESM-026` and nothing is emitted. A typed-context reference to a historical revision or property identity is refused with `STAGE-ESM-025`. Stage cannot render Chronicle event-type migrations yet (Cratis/Stage#204, which depends on Cratis/Screenplay#71), and Stage's runtime (`cratis run`, the Host) still refuses evolved events, so deliver evolved events as gap-fill. Stage 4.24.1 also lists the ESM v6 members (reactions, captures, application triggers, clock and capture specifications) as rejected `STAGE-ESM-024` in its surface ledger, but the version gate refuses the model first, so a v6 model reports `STAGE-ESM-016` only. The bundled Stage 4.24.2 (cratis 3.28.3) reports an evolved event with `STAGE-ESM-026` only (probed); cratis 3.28.2 bundled Stage 4.24.1 (3.28.1 and earlier: 4.24.0), refused a v4 model with `STAGE-ESM-016` and also reported `CLI-RENDER-003`. The admitted vertical:
144
148
 
@@ -1,4 +1,4 @@
1
- # Stage 4.24 admission: codes, specification rules and observed refusals
1
+ # Historical Stage 4.24 admission: codes, specification rules and observed refusals
2
2
 
3
3
  ## Contents
4
4
 
@@ -9,6 +9,13 @@
9
9
  - Observed refusals
10
10
  - Source disagreements (trust the code)
11
11
 
12
+ Current pins are in `cratis-screenplay-toolchain` `references/versions.md`:
13
+ CLI 3.41.0 bundles Stage 4.51.3 / Screenplay 4.114.0. It admits through ESM v7
14
+ to Stage planning; above v7 is CLI-RENDER-004. The CLI's v7 canonical-corpus
15
+ planning spec receives STAGE-ESM-028/029 for generated values/responses.
16
+ The detailed 4.24.x source/probe rows below have not been relabeled as current
17
+ runtime verification; run admission on the actual bundled renderer.
18
+
12
19
  Read at Stage `v4.24.0`, re-read at `v4.24.1` and `v4.24.2` (`SemanticCratisAdmission.EventRevisions.cs`, `SemanticEventLineageAdmission.cs`, ESM v4 section of `Documentation/guides/build-renderer-target.md`) (`Source/Rendering.Cratis/Semantics/SemanticSurfaceLedger.cs`, `Documentation/guides/build-renderer-target.md`; 4.24.1 changed only the ledger, dependency pins and the Dockerfile) (`Source/Rendering.Cratis/CratisArtifactRenderPlanner.cs`,
13
20
  `Semantics/SemanticCratisAdmission*.cs`, `SemanticSpecificationAdmission*.cs`,
14
21
  `PureTransitionAdmission.cs`, `SemanticImplementationAdmission.cs`) and cli `v3.28.2`
@@ -15,8 +15,8 @@
15
15
  { "kind": "skill-contains", "value": "`Customizations/`" },
16
16
  { "kind": "skill-contains", "value": "`Stage__Runtime__Engine=semantic`" },
17
17
  { "kind": "skill-contains", "value": "`--engine semantic`" },
18
- { "kind": "skill-contains", "value": "Stage#177" },
19
- { "kind": "skill-contains", "value": "never carry event source type" },
18
+ { "kind": "skill-contains", "value": "Routes bind/reference-execute as v8" },
19
+ { "kind": "skill-contains", "value": "CLI-RENDER-004" },
20
20
  { "kind": "skill-contains", "value": "STAGE-ESM-024" },
21
21
  { "kind": "skill-contains", "value": "`v4.24.2`" },
22
22
  { "kind": "skill-contains", "value": "STAGE-ESM-026" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratis/pi",
3
- "version": "7.21.0",
3
+ "version": "7.22.0",
4
4
  "description": "Configuration-aware Cratis AI integration for Pi",
5
5
  "type": "module",
6
6
  "files": [