@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
@@ -1,6 +1,20 @@
1
1
  # Renderable subset (V5): what `cratis render` admits
2
2
 
3
- Sources, all read at tags: Stage v4.24.1 `Source/Rendering.Cratis/Semantics/SemanticSurfaceLedger.cs`
3
+ ## Contents
4
+
5
+ - What Stage 4.24 admits
6
+ - Authoring consequences in renderable mode
7
+ - Ownership, publication and recovery
8
+ - Reading V5
9
+
10
+ Current pins: standalone Screenplay 4.127.0; CLI 3.41.0 bundles Screenplay
11
+ 4.114.0 and Stage 4.51.3 (`versions.md`). CLI admits ESM v7 to Stage planning;
12
+ above v7 is CLI-RENDER-004. Its v7 canonical corpus gets STAGE-ESM-028/029 for
13
+ generated values/responses (`v3.41.0:Source/Cli.Specs/for_ScreenplayPlanning/when_planning_an_esm_v7_model.cs`).
14
+ The following detailed Stage 4.24.x results are **historical**, not reverified
15
+ 4.51.3 claims. Run the bundled renderer before asserting current renderability.
16
+
17
+ Historical sources, all read at tags: Stage v4.24.1 `Source/Rendering.Cratis/Semantics/SemanticSurfaceLedger.cs`
4
18
  (an exhaustive map of every ESM member to Rendered, Rejected(code) or Ignored),
5
19
  `CratisArtifactRenderPlanner.cs`, `PureTransitionAdmission.cs`; cli v3.28.2
6
20
  `Commands/Render/RenderSettings.cs` and `Documentation/reference/screenplay.md`. Re-run the
@@ -41,6 +55,14 @@ whole automation is hand-written (gap-fill).
41
55
  | Specifications | command-action scenarios: given events, `when <Command>`, `then` events (ordered or any order), `then readmodel`, `then query`, `then error` (naming a rendered constraint or message), `then denied`, `given caller`. Two narrow when-less routes: an unprotected single `then query` seeded by exactly one `given readmodel` whose key and values match (no given events, no caller), and a query-only denial (`given caller`, one `then query` with no results, `then denied`, a protected query, no role claims) | `then no readmodel`, `when append`, composite values, error codes not naming a rendered constraint: 011. Any other when-less specification (for example given events with `then query`) fails 011 |
42
56
  | Compliance | none | any `@pii` or `@sensitive` already fails binding (PLAY0268). The C# provider mapping (Stage v4.29.0, Stage#197) is `@pii` to `[PII]`, `@sensitive` to `[Encrypted]` + `[NotAudited]`, both to `[PII]` only |
43
57
 
58
+ At standalone 4.127.0, compliance uses bare `pii`/`secret` (legacy markers are
59
+ accepted with PLAY0565 information); either still refuses binding. Identity blocks,
60
+ purposes and event `subject` are authoring metadata, not provider realization;
61
+ executing identity detail reads still refuses PLAY0268. Current source/stream
62
+ routes are admitted as v8, including composite ids, not the historical binding
63
+ refusal above; CLI 3.41.0 still refuses versions above v7. Never split hand-joined
64
+ legacy ids or drop protected ids into routing to fit a renderer (PLAY0515).
65
+
44
66
  ## Authoring consequences in renderable mode
45
67
 
46
68
  - `produces when` is STAGE-ESM-006: split conditional outcomes into separate commands, or
@@ -1,29 +1,113 @@
1
1
  # Event sources, streams and command routes
2
2
 
3
- What a model that uses `eventsource`, `stream`, `streamId` or a command route can and
4
- cannot do today. Facts read at Screenplay v4.68.0 (`SemanticModelBinder.CommandProductions.cs`),
5
- Stage v4.24.0 (`SemanticCratisAdmission.cs`) and Chronicle v19.30.0 / Arc v22.49.0.
6
-
7
- | Activity | Today |
8
- | --- | --- |
9
- | Author in `.play` (syntax, MCP views `event-sources`, `event-streams`, `command-routes`) | yes, since Screenplay v4.62.0 |
10
- | Validate (V1: authorable) | yes |
11
- | Bind (V3) and run specifications | no: binding reports `PLAY0268`; the whole application then has no executable model. V2 (executable diagnostics) shows that blocking `PLAY0268` as the evidence for the blocked V3 |
12
- | Render (V5) | no: Stage admits ESM v1 to v4 only, so a model of v5 or later is refused with `STAGE-ESM-016` and an evolved event with `STAGE-ESM-026` |
13
- | Deliver as code | gap-fill by hand with the model as the contract (`cratis-screenplay-render-and-gap-fill`, case C) |
14
-
15
- Why binding refuses: no supported executable model (ESM) version admits these constructs. At 4.68.0 the
16
- `PLAY0268` message reads "Event sources, streams and routes are not admitted by any supported executable model
17
- (ESM) version yet (#302)." They have no ESM version number: by decision 0025 a number is assigned only at a
18
- release-ready admission, so do not copy a number into a model, a skill or a decision. Tracked in
19
- Cratis/Screenplay#407 (increment 2 of #302).
20
-
21
- Stage: even when a model uses none of these constructs, Stage 4.24.0 renders appends
22
- without event source type, event stream type or event stream id, so Chronicle's defaults
23
- apply. Tracked in Cratis/Stage#177, #200 and #201. Keep a declared route as intent in the
24
- model and implement it in hand-written code; never remove it to make the model bind or render.
25
-
26
- Code-level target for the hand-written part: `IEventSource`, `[EventSource]`, `[EventStream]`
27
- (Chronicle 19.30.0 and later) and Arc's `[EventSource<TSource>(stream)]` on a command
28
- (Arc 22.49.0 and later); see `cratis-chronicle-client-dotnet` and `cratis-arc-command`
29
- (`references/handler-shapes.md`).
3
+ ## Contents
4
+
5
+ - Admission
6
+ - Declare and route
7
+ - Specification routes
8
+ - Canonical keys and evolution
9
+ - Boundaries
10
+
11
+ ## Admission
12
+
13
+ Sources, streams and command/specification routes bind and reference-execute as
14
+ **ESM v8** on Screenplay 4.125.0. Current evidence: released `event-sources.md`,
15
+ `specifications.md`, `Versions.cs`; the complete example below compiled with
16
+ `--warnaserror` and passed `screenplay test` on 4.125.0.
17
+
18
+ CLI 3.41.0 renders only model versions up to v7: routed v8 models receive
19
+ `CLI-RENDER-004` before planning/publication. This is not a source-validation or
20
+ binder refusal. Keep the routed model as contract and gap-fill its realization;
21
+ never remove routing to obtain a render. Pins: `versions.md`.
22
+
23
+ The 4.68.0 historical binder refusal (`PLAY0268`, no admitted version then) is
24
+ not the current disposition. Systems/operations and exact numbers still report
25
+ PLAY0268; they are separate capabilities, not evidence against v8 routing.
26
+
27
+ ## Declare and route
28
+
29
+ An `eventsource` belongs to the application. Its `identifier` states the nominal
30
+ source-id type; streams belong to that source. A command's `stream Source.Stream`
31
+ selects the exact declared source/stream, with nested scalar `streamId = <value>`
32
+ for a keyed stream. Portable mapping sources are required direct non-generated
33
+ command properties or compatible scalar literals; nested paths can be authored
34
+ but refuse executable admission with PLAY0268. An unkeyed stream takes no id. Composite stream ids instead
35
+ use a bare nested `streamId` followed by all named part mappings exactly once.
36
+ A property literally named `stream` is written `@stream` where the command clause
37
+ would otherwise consume it. Do not invent source-only route syntax.
38
+
39
+ ```screenplay
40
+ concept AccountId : Uuid
41
+ concept Month : Int
42
+ eventsource Account
43
+ identifier AccountId
44
+ stream Transactions
45
+ streamId Month
46
+ module Banking
47
+ feature Deposits
48
+ slice StateChange Deposit
49
+ command Deposit
50
+ accountId AccountId identifier
51
+ month Month
52
+ amount Decimal
53
+ stream Account.Transactions
54
+ streamId = month
55
+ produces event Deposited
56
+ amount Decimal = amount
57
+ specification Depositing
58
+ when Deposit
59
+ accountId = "3fa85f64-5717-4562-b3fc-2c963f66afa6"
60
+ month = 10
61
+ amount = 40
62
+ then Deposited
63
+ for "3fa85f64-5717-4562-b3fc-2c963f66afa6"
64
+ stream Account.Transactions
65
+ streamId = 10
66
+ amount = 40
67
+ ```
68
+
69
+ ## Specification routes
70
+
71
+ `given <Event>`, `when append <Event>` and `then <Event>` may state a route;
72
+ `when <Command>` may not, because its route comes from the declaration. Routes
73
+ belong to occurrences, not event types. Scalar ids are concrete literals of the
74
+ stream's declared type; composite ids name every declared part. Routed history
75
+ and appends require a concrete `for` of the source identifier type; routed `then`
76
+ may omit it. Unknown/ambiguous destination types refuse, never default to text.
77
+
78
+ `then` without routing leaves the route unspecified (wildcard), while
79
+ `then ... no stream` explicitly expects an unrouted occurrence. `no stream` is
80
+ not permitted on `given` or `when append`; no route there already means unrouted.
81
+ An event-level `stream = ...` or `streamId = ...` remains payload, not routing.
82
+ Typed event examples may supply a route, replaced as a whole by step overrides;
83
+ `for` is independent. No spelling restores a wildcard after an example supplies
84
+ a route. See `cratis-screenplay-specifications` for fixture provenance.
85
+
86
+ ## Canonical keys and evolution
87
+
88
+ At Screenplay 4.127.0, stream-id literals on command routes (PLAY0504) and
89
+ specification routes (PLAY0549) must be nonempty, well-formed Unicode NFC text;
90
+ invalid text is refused, never normalized. In Double numeric mode integer ids
91
+ are within ±(2^53−1); Exact mode has no such bound but still refuses binding.
92
+ Known routed command identifiers and production destination types must equal
93
+ the source's nominal identifier type (PLAY0504 is an error, not a warning).
94
+ Allocation is typed by the generated identifier, or without one requires a
95
+ UUID-based source. Unrouted commands are unaffected.
96
+
97
+ Composite schemas declare `streamId` with at least two named scalar parts.
98
+ Command routes map every part once; specification parts are literals only.
99
+ Format each part by the portable scalar rules, escape `%` to `%25` and `|` to
100
+ `%7C`, then join with `|` in declaration order; decoding is strict. Specification
101
+ route contradictions compare canonical values part by part (UUID case variants
102
+ are equal). Changing a stored stream's key schema needs a new stream identity
103
+ or migration. Keep hand-joined legacy ids as scalar text: never split by guesswork.
104
+ Authority: v4.127.0 `event-sources.md`, `diagnostics.md`, decision 0033.
105
+
106
+ ## Boundaries
107
+
108
+ Reference routing does not prove target deployment, concurrency or protected
109
+ reads. Personal/secret values cannot become source or stream ids (PLAY0515),
110
+ including composite parts and nested command mapping sources. Use surrogates.
111
+ Code-level realization uses Chronicle `IEventSource`, `[EventSource]`,
112
+ `[EventStream]` and Arc's event-source route attribute; follow the corresponding
113
+ client/command skills rather than translating route metadata to payload copies.
@@ -1,6 +1,10 @@
1
1
  # Traps (one line each, with the fix)
2
2
 
3
- Re-checked against Screenplay v4.66.0 and cli v3.28.2 where marked [probed] or [source]. Tool and version facts: `versions.md`. Compiler-verified syntax: `cheat-sheet.md`.
3
+ Current pins: Screenplay 4.127.0 / CLI 3.41.0 (`versions.md`). Unless explicitly
4
+ updated below, [probed]/[source] rows retain their historical v4.66.0/CLI 3.28.2
5
+ scope; negative capability claims there are not current verdicts. Current routes
6
+ bind as v8, v7 reaches Stage planning, reference tests have CLI/MCP routes, and
7
+ exact numbers are documented in the grammar. Compiler syntax: `cheat-sheet.md`.
4
8
 
5
9
  1. Clean V1 is not executable: binding errors appear only through MCP (V2) or `render`. Neither `screenplay <folder>` nor `cratis screenplay validate` binds. [probed]
6
10
  2. The Screenplay samples validate clean but are not all executable; copying their idioms (list queries, `@pii`, `today`, `reads`, `$causedBy`, templates, performers) breaks V3. [probed]
@@ -8,10 +12,10 @@ Re-checked against Screenplay v4.66.0 and cli v3.28.2 where marked [probed] or [
8
12
  4. Plain `produces` without `for` means allocation in the ESM but "the identifier" in rendered code. Always write `for <identifier>`. [PLAY0478 probed]
9
13
  5. PLAY0029 is a warning: a misspelled keyword (or `type` inside a slice) drops the construct silently. Use `--warnings-as-errors`. [probed]
10
14
  6. Validate the folder: `cratis screenplay validate file.play` ignores imports and reports false unknown-name warnings (cli#244, open); the standalone tool follows them. [probed on 3.28.2 and 4.66.0]
11
- 7. Unresolved names are warnings by design. Mappings to undeclared projection targets and undeclared events in `remove with`/capture `append` pass V1 and fail binding (V3, PLAY0273); a declared read-model property that nothing maps is reported by no tool. Run V3 and check field lineage by hand.
15
+ 7. Current V1 warns on absent projection/children/nested targets (PLAY0514) and unknown removal/capture events (PLAY0166). Opt-in field-origins checks find unmapped declared fields (PLAY0534) where coverage is known; still walk lineage for skipped/opaque shapes.
12
16
  8. Severity does not soften a rule: `severity warning` still rejects the command.
13
17
  9. Authorization (module AND feature AND construct) runs before validation; unauthorized is `then denied`, never `then error`.
14
- 10. A reaction's `invokes` runs with no caller (no syntax for an identity yet: Screenplay#383, open): a gated invoked command rejects and ends the scenario. Design the trusted path (`cratis-screenplay-automations-and-translations`): keep the gate and record the capability gap; at code level `[ExecuteCommandsAsSystem]` (Arc 20.56.0 and later, so also in a Stage-rendered app on Arc 22.25.0); never invent `runs as`. Never strip authorization.
18
+ 10. Without a declared actor an invocation is caller-less. At 4.125.0 declare reaction `runs as system role "<Role>"` (ESM v10), keep its gate, and reference-test the trusted path. CLI 3.41.0's 4.114.0 parser rejects this syntax (PLAY0137); Stage 4.51.3 audits through v7 only. Arc gap-fill uses `[ExecuteCommandsAsSystem]` for returned commands, not a fictional `given caller`.
15
19
  11. A reaction `produces` without `for` lands on the trigger's event source; clock and application triggers need an explicit `for`.
16
20
  12. Read-model identity comes from its keyed queries, which must all use the same `by` property: `query XById => RM optional` + `by xId XId` with `xId` a read-model property, and the identifier equals the projection's effective key (table in slice-design `references/read-model-design.md`; full rule, including Stage's narrower admission and `STAGE-ESM-017`, in `cratis-stage-rendering-and-sandbox` `references/admission.md`). Never mark a read-model property `identifier`. (PLAY0268 when the keyed queries do not share one `by` property; PLAY0351 when a `given`/`then` readmodel block omits that property.)
17
21
  13. Projection `key` routes only on `from` (projection-level: PLAY0381). `all` is per event source. Joins never create instances and match the joined event's source id. [probed]
@@ -27,10 +31,10 @@ Re-checked against Screenplay v4.66.0 and cli v3.28.2 where marked [probed] or [
27
31
  23. `@` escapes are mandatory for `tag`, `authorize`, `produces`, `reads`, `file`, `validate`, `sequence`, `occurred`, `causedBy`, `namespace`, `correlation`, `causation`, and projection `key`/`parent`/`with` as names.
28
32
  24. Comments do not survive canonicalizing edits (PLAY0288 reprint; `droppedCommentCount`); keep durable rationale in `description` text, not `//`.
29
33
  25. MCP writes: propose, review, approval, apply by the identity owner (the session that owns the MCP connection); other subagents return edit requests; proposals are connection-local, at most 16 (`cratis-screenplay-model-authoring`).
30
- 26. Future syntax (operations, systems, eventsource/stream) parses but never binds (not admitted by any supported ESM version); `generated` and `returns` bind from standalone 4.68.0 (ESM v7) and still report PLAY0268 on the 4.66.0 bundled in cratis 3.28.x; never invent ADR-planned syntax (`derive`, `provide`, `advisory`, `origin`, subject marks, `order by`, paging, `occurred at`, `from` filters, `for each`).
34
+ 26. Operations/systems and exact numbers remain unadmitted. Sources/streams/routes bind and reference-execute as ESM v8 at 4.125.0; generated values/responses bind as v7. CLI 3.41.0 renders through v7 only, with construct-specific Stage refusals. Consult released grammar rather than inventing syntax from decisions.
31
35
  27. Translate vs Automation is semantic: external facts become local facts in `Translate`; in-app event-to-event goes in `Automation`.
32
36
  28. Personas drive the board: a persona must list every policy on the path, including module-level `IsAuthenticated`.
33
- 29. Sample specifications are never executed; their expected values (e.g. `.0000000Z` clock fraction, given==when clock boundary) are illustrative only.
37
+ 29. A sample's source check is not execution. Run selected admitted specifications through `screenplay test`/MCP; given==when clock still fires no scheduled occurrence.
34
38
  30. Claims compare with `matches` (`claim "dept" matches "Finance"`); `==` is PLAY0120. Conditions with `contains`/`starts with` compile but do not bind. [probed]
35
39
  31. One `every`/`all` block per projection level for V3; `$eventContext.occurred.Week` does not bind. [probed]
36
40
  32. Concept rules: `min`/`max`/`length ==`, not `length 3 to 10` (PLAY0141). [probed]
@@ -38,10 +42,27 @@ Re-checked against Screenplay v4.66.0 and cli v3.28.2 where marked [probed] or [
38
42
 
39
43
  34. A `from <Event> key <property>` routes only if every such event carries that property: an event that frees or updates a row keyed by another stream's id must carry that id in its payload, or the row never changes. Whether the compiler reports a missing key property is unverified [to probe]; check by hand.
40
44
  35. `description`/`documentation` are authoring metadata: board, MCP and Prologue show them; `cratis render` never does (Stage#178). A rule only in prose is unenforced in rendered code; make it a rule layer, a spec or a recorded target requirement.
41
- 36. Any `system`/`operation`, event source or stream (not admitted by any supported ESM version), and `generated`/`returns` on a compiler before 4.68.0 (including the 4.66.0 in cratis 3.28.x), leaves the whole application without an executable model (PLAY0268), not just the slice: keep them out of executable/renderable scope. Even on 4.68.0 Stage 4.24.2 refuses generated values and responses (ESM v7) whole with `STAGE-ESM-016`; gap-fill.
45
+ 36. One unadmitted construct (operations, exact numbers, refusal/redelivery) blocks whole-model binding. Routing is admitted v8, not one of those constructs; CLI render's v7 boundary is a separate refusal. Do not remove routing or authorization to render a model.
42
46
  37. Personas are not in the ESM (Screenplay#254); specs cannot reference them. Write `given caller` as the roles/claims that stand for the persona.
43
47
  38. A rule that depends on stored state is `reads <View>` + `require <expr> message "..."` (stated intent; PLAY0268/0271 at binding are expected in design mode). The slice `description` must mark it NOT enforced in the model today (Screenplay#129/#209) and name the target: Arc `[ProtectedDecision]` + `DecisionRead<T>` (Arc v22.39.0 and later; not available in a Stage-rendered app on Arc 22.25.0), Chronicle DCB (`concurrency` scope), or a constraint where one fits. Forbidden: caller-supplied copies of state in `require`, boolean attestation inputs (`confirmsX == true`), rules hidden in `handler`/implementation-hint prose. An unguarded materialized read is unsafe for a protected decision.
44
48
 
49
+ Current identity/compliance traps (v4.127.0 `identity.md`, `concepts.md`, `events.md`,
50
+ `purposes.md`, `diagnostics.md`):
51
+ - `$identity` built-ins alias `$context.identity`; declared detail reads are PLAY0268,
52
+ while an identity block alone does not block readiness. `scoped to` is opaque,
53
+ not a detail reference. Query sources need keyed single compatible results and
54
+ token-only keys/gates that do not depend on details.
55
+ - `pii personal` repeats one marker (PLAY0653). Legacy markers are accepted but
56
+ deprecated (PLAY0565); repairs preserve notes, never invent legal content.
57
+ - Event `subject` is report-only (PLAY0270), not emitted C# `[Subject]` or runtime
58
+ lineage. Keep stream identity, data subject, encryption scope and policy subject apart.
59
+ - Purpose metadata/checks/records declare processing, not lawfulness or retention.
60
+ - PLAY0504 is an error; stream-id text is nonempty well-formed NFC (refuse, never
61
+ normalize), Double integer ids are within ±(2^53−1); canonical UUID comparison
62
+ ignores case. Protected concepts cannot be stream ids/parts/mapping sources (PLAY0515).
63
+ - Run `--check privilege` on elevated event-trigger paths; opaque producers are
64
+ unknown, not safe. Arc needs `[ExecuteCommandsAsSystem]` to supply a principal.
65
+
45
66
  The SKILL.md top 12: 1, 4, 5, 6, 7, 10, 12, 13, 17, 18, 20, 21 (+ mode/version notes there). Traps 39 to 44 are tool traps added at the 4.66.0 pin.
46
67
  39. A handler never binds: PLAY0268 "Command '<n>' handler requires a constrained implementation attachment", with a file, a fence, `implementation` or `hint` alike. `implementation` and `hint` are accepted on a command handler, an operation execute/compensate phase and (from 4.65.0) a command property named rule, and are rejected on concept rules, built-in property rules and whole-command `require`/`validate` bodies; on a handler they are authoring intent only (no execution, lock or confirmation). A handler slice is gap-fill, not a customization of a rendered slice. [source, probed]
47
68
  40. `numbers exact` parses on 4.66.0 to 4.68.0 but never binds (PLAY0268; "not admitted by any supported executable model (ESM) version yet") and is PLAY0001 on older compilers; it is absent from `grammar.md`. Never use it in a model or example meant to execute. [probed]
@@ -28,12 +28,21 @@ 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.127.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
+ including PLAY0530–PLAY0537, purposes (PLAY0602–0606) and privilege (PLAY0652).
44
+ Whole-source errors skip them; a skipped check is not passed.
45
+ Names/codes, coverage limits and editor support: `diagnostics.md`.
37
46
  - Warnings are failures here. PLAY0029 (a construct dropped silently) and the unresolved-name
38
47
  warnings are the defects this verdict exists to catch.
39
48
  - Syntax and consistency checks (PLAY0282 to PLAY0294) run; binding does not.
@@ -54,7 +63,7 @@ MCP reports `V2 not run: no MCP in this agent` unless the brief supplies fresh o
54
63
  source revision).
55
64
  4. Report the codes with counts, blocking (error severity) apart from informational. A list
56
65
  with blocking entries is a valid V2 result (`V2 read: 6 blocking, PLAY0268 x3 list query,
57
- @pii ...`); it is the evidence for a "V3 blocked" report. The view also lists
66
+ pii ...`); it is the evidence for a "V3 blocked" report. The view also lists
58
67
  information-severity diagnostics (PLAY0269 deferred UI, PLAY0270 authoring metadata such as
59
68
  descriptions, personas and screens) on models that bind; they do not block.
60
69
 
@@ -71,18 +80,25 @@ comparison needs it). Binding is what makes a model renderable at all. V3 means
71
80
  never "specifications pass".
72
81
 
73
82
  - Report the ESM version the model needs: `V3 ready (screenplay 4.68.0, ESM v6)`,
74
- `V3 blocked: PLAY0268 x3 (list query, @pii) - design scope kept`.
75
- - A blocked V3 is not repaired by deleting protection or domain rules. Never remove `@pii`,
76
- `@sensitive`, authorization, list queries, automations or rules to reach V3; record the
83
+ `V3 blocked: PLAY0268 x3 (list query, pii) - design scope kept`.
84
+ - A blocked V3 is not repaired by deleting protection or domain rules. Never remove `pii`,
85
+ `secret`, authorization, list queries, automations or rules to reach V3; record the
77
86
  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`).
87
+ - A model is executable only on the compiler that bound it. V3 does not carry
88
+ to render admission: CLI 3.41.0 passes up to ESM v7 to Stage, refuses newer
89
+ models with CLI-RENDER-004, and its v7 corpus receives STAGE-ESM-028/029.
90
+ The old 3.28.x/Stage 4.24.x probes remain historical in the subset references.
80
91
 
81
92
  ## V4: reference specifications run
82
93
 
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.
94
+ Run `screenplay test <root> [--filter <exact-address>] [--format text|json]` on
95
+ 4.125.0, or MCP `run-specifications`. The compile command alone still does not
96
+ execute scenarios. Reference execution is in-memory: no external services or
97
+ opaque code run. Record route, expected versus discovered/selected counts,
98
+ passed, failed and unsupported outcomes. Exit 0 means all selected passed; 1
99
+ failed, 2 could not run/invalid input or selection, 3 unbound or unsupported.
100
+ Unknown filters refuse rather than select zero. No discovered specifications
101
+ is not proof of coverage.
86
102
  The reference runner returns unsupported for a specification that reads a reducer-built read
87
103
  model and for any construct whose evaluation needs an opaque body.
88
104
 
@@ -133,9 +149,11 @@ source change makes earlier verdicts stale.
133
149
 
134
150
  ## Example gate (for skill and documentation authors)
135
151
 
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.
152
+ Historical corpus fences were checked with standalone 4.68.0 and CLI 3.28.2.
153
+ Do not promote those results to current pins without rerunning. Check each changed
154
+ complete fence with standalone 4.125.0 `--warnaserror`; run `screenplay test` for
155
+ specification examples, and verify expected-diagnostic examples against their
156
+ claimed codes. Where bundle compatibility matters, also check CLI 3.41.0.
139
157
  The `// Needs the standalone screenplay compiler (ESM v6)` first-line marker belonged to cratis
140
158
  before 3.28.2, which could not validate those fences; no fence carries it now, and a
141
159
  checker that still skips marked fences under `cratis` skips nothing. Examples meant to execute are also opened through MCP and