@cratis/pi 7.21.0 → 7.23.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 (81) hide show
  1. package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +31 -15
  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 +41 -38
  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 +57 -44
  16. package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +154 -0
  17. package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +57 -0
  18. package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +15 -13
  19. package/package/corpus/skills/cratis-screenplay-command-surface/references/operations.md +80 -0
  20. package/package/corpus/skills/cratis-screenplay-command-surface/references/policy-persona-seed.md +23 -1
  21. package/package/corpus/skills/cratis-screenplay-command-surface/verification.json +8 -2
  22. package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +19 -9
  23. package/package/corpus/skills/cratis-screenplay-discovery/references/interview-questions.md +1 -1
  24. package/package/corpus/skills/cratis-screenplay-discovery/references/storming-loop.md +6 -5
  25. package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +10 -8
  26. package/package/corpus/skills/cratis-screenplay-event-modeling/references/naming-primitives.md +5 -3
  27. package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +6 -5
  28. package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +41 -49
  29. package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +15 -5
  30. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +48 -8
  31. package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +47 -42
  32. package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +79 -15
  33. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +49 -11
  34. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +155 -14
  35. package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +3 -3
  36. package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +19 -7
  37. package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +1 -1
  38. package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +11 -2
  39. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +3 -3
  40. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/completeness-self-check.md +1 -1
  41. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/verdicts-and-modes.md +1 -1
  42. package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +17 -0
  43. package/package/corpus/skills/cratis-screenplay-read-surface/references/guarded-actions.md +79 -0
  44. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +11 -9
  45. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +6 -3
  46. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +1 -1
  47. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/verification.json +2 -2
  48. package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +3 -2
  49. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +13 -2
  50. package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +13 -3
  51. package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +5 -3
  52. package/package/corpus/skills/cratis-screenplay-slice-design/references/review-questions.md +2 -1
  53. package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +4 -3
  54. package/package/corpus/skills/cratis-screenplay-slice-design/references/slicing.md +40 -0
  55. package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +24 -16
  56. package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +111 -0
  57. package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +5 -6
  58. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +22 -8
  59. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/chronicle-boundaries.md +8 -4
  60. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +10 -0
  61. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +13 -2
  62. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +3 -3
  63. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/verification.json +2 -2
  64. package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +44 -35
  65. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +3 -3
  66. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +58 -2
  67. package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +128 -10
  68. package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +13 -1
  69. package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +37 -13
  70. package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +10 -2
  71. package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +23 -1
  72. package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +111 -27
  73. package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +27 -6
  74. package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +34 -16
  75. package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +98 -136
  76. package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +13 -5
  77. package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +20 -0
  78. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +10 -6
  79. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +8 -1
  80. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +2 -2
  81. package/package.json +1 -1
@@ -4,159 +4,121 @@
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.127.0** (`e70435a4`) | Released tag `v4.127.0`; installed `screenplay --version`; changed identity/compliance examples compiled |
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.127.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.127.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
+ At 4.127.0, `$identity` aliases built-in caller paths; declared identity details
90
+ remain metadata and their executable reads report PLAY0268. Bare `pii`/`secret`
91
+ still block binding; `personal` aliases `pii`. Legacy markers are accepted with
92
+ PLAY0565 information, duplicates warn PLAY0653. Event `subject` and processing
93
+ purposes are report-only metadata (PLAY0270); purpose checks/reports do not prove
94
+ lawfulness or enforce retention. See command-surface context/compliance references.
95
+
96
+ ## Historical probes
97
+
98
+ - Screenplay 4.68.0 admitted v7; CLI 3.28.2/3.28.3 bundled 4.66.0 (v6 at most),
99
+ Stage 4.24.1/4.24.2. Those old negative v7 probes do not describe CLI 3.41.0.
100
+ - CLI before 3.28.2 bundled Screenplay 4.60.1: false cascade PLAY0285, v6 refusal
101
+ and dynamic-root initialization bug. The roots bug was fixed in 4.63.2.
102
+ - CLI 3.28.2 file validation ignored imports; this is an old probe, not a current
103
+ reason to invent missing declarations. Validate the complete root.
104
+ - Older standalone empty-folder probes exited 0. Current validation still needs
105
+ a nonzero file count, and specification execution needs an expected selection.
125
106
 
126
107
  ## Revisions and descriptions
127
108
 
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".
109
+ `modelRevision` exists only when binding succeeds; it is canonical semantic
110
+ identity, not source identity. Source positions and report-only metadata can
111
+ change source/workspace revisions without changing it. Persisted catalogs
112
+ preserve assigned identities; do not reconstruct them from names.
113
+
114
+ A render manifest's `semanticRevision` is a different provenance value, made
115
+ with the render name and bundled compiler. Do not compare it directly to MCP
116
+ `modelRevision`. Compare successive renders with the same identity and inputs.
154
117
 
155
118
  ## Upgrade checklist
156
119
 
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).
120
+ 1. Read installed versions and released dependency pins.
121
+ 2. Check source, binder, reference runner and renderer admission separately.
122
+ 3. Compile each changed example; execute specification examples with the
123
+ reference route. Preserve explicit expected-diagnostic checks.
124
+ 4. Re-probe affected capabilities before replacing a historical version label.
@@ -3,21 +3,29 @@
3
3
  "input": "Check a Screenplay model folder: which compiler should I run, what do V1 to V3 mean, and what does the cratis CLI do with my Automation slice?",
4
4
  "fixtures": [],
5
5
  "assertions": [
6
+ { "kind": "skill-contains", "value": "4.127.0" },
7
+ { "kind": "skill-contains", "value": "PLAY0653", "file": "references/diagnostics.md" },
8
+ { "kind": "skill-contains", "value": "PLAY0646", "file": "references/diagnostics.md" },
9
+ { "kind": "skill-contains", "value": "PLAY0595", "file": "references/diagnostics.md" },
10
+ { "kind": "skill-contains", "value": "PLAY0652", "file": "references/diagnostics.md" },
11
+ { "kind": "skill-contains", "value": "PLAY0504 | E", "file": "references/diagnostics.md" },
6
12
  { "kind": "skill-contains", "value": "references/versions.md" },
7
13
  { "kind": "skill-contains", "value": "PLAY0029" },
8
14
  { "kind": "skill-contains", "value": "--warnaserror" },
9
15
  { "kind": "skill-contains", "value": "4.68.0" },
10
16
  { "kind": "skill-contains", "value": "4.66.0" },
11
17
  { "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)" },
18
+ { "kind": "skill-contains", "value": "Operations and exact numeric" },
19
+ { "kind": "skill-contains", "value": "Stage generated-value/response refusals `STAGE-ESM-028`/`029`" },
14
20
  { "kind": "skill-contains", "value": "cratis screenplay validate" },
15
21
  { "kind": "skill-contains", "value": "cli#244" },
16
22
  { "kind": "skill-contains", "value": "`notifications/initialized`" },
17
23
  { "kind": "skill-contains", "value": "A handler never binds" },
18
24
  { "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" }
25
+ { "kind": "skill-contains", "value": "CLI-RENDER-004" },
26
+ { "kind": "skill-contains", "value": "PLAY0514" },
27
+ { "kind": "skill-contains", "value": "bind as ESM v8" },
28
+ { "kind": "skill-contains", "value": "PLAY0530/0531", "file": "references/diagnostics.md" },
29
+ { "kind": "skill-contains", "value": "Editor versus C# verdicts", "file": "references/diagnostics.md" }
22
30
  ]
23
31
  }
@@ -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:
@@ -68,7 +68,7 @@ The `.play` model is the source of truth; Stage-managed output is derived from i
68
68
  - Hand-written code goes in `Customizations/` (unmanaged), in a separate project, or in
69
69
  an explicitly authorized gap-fill for scope Stage cannot render (`cratis-screenplay-render-and-gap-fill`).
70
70
  - A customization never makes a rejected model renderable, and never weakens modeled
71
- authorization, validation or `@pii` to get past a refusal.
71
+ authorization, validation or personal-data and secret markers to get past a refusal.
72
72
  - Never claim a whole-application result from a subset of the model.
73
73
 
74
74
  ## Publication and recovery
@@ -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.127.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.23.0",
4
4
  "description": "Configuration-aware Cratis AI integration for Pi",
5
5
  "type": "module",
6
6
  "files": [