@cratis/pi 7.29.1 → 7.30.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 (64) hide show
  1. package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +9 -4
  2. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +4 -2
  3. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +3 -3
  4. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/provenance.md +5 -2
  5. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/public-events-and-direction.md +137 -0
  6. package/package/corpus/skills/cratis-screenplay-automations-and-translations/verification.json +5 -1
  7. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +15 -16
  8. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/invocation-identity.md +4 -4
  9. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/product-sources.md +15 -0
  10. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/verification.json +3 -1
  11. package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +8 -9
  12. package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +1 -1
  13. package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +4 -4
  14. package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +2 -2
  15. package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +1 -1
  16. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +2 -2
  17. package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +4 -4
  18. package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +7 -1
  19. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +7 -2
  20. package/package/corpus/skills/cratis-screenplay-model-authoring/references/screen-authoring-workflow.md +5 -3
  21. package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +1 -1
  22. package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +10 -11
  23. package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +1 -1
  24. package/package/corpus/skills/cratis-screenplay-model-review/references/public-keys-and-routes.md +32 -0
  25. package/package/corpus/skills/cratis-screenplay-model-review/verification.json +1 -0
  26. package/package/corpus/skills/cratis-screenplay-projections/SKILL.md +11 -0
  27. package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +19 -16
  28. package/package/corpus/skills/cratis-screenplay-read-surface/references/named-keys.md +122 -0
  29. package/package/corpus/skills/cratis-screenplay-read-surface/verification.json +3 -0
  30. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +9 -6
  31. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +3 -3
  32. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/verification.json +1 -1
  33. package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +11 -0
  34. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +2 -2
  35. package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +32 -9
  36. package/package/corpus/skills/cratis-screenplay-slice-design/references/read-model-design.md +20 -13
  37. package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +12 -10
  38. package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +3 -2
  39. package/package/corpus/skills/cratis-screenplay-specifications/references/source-notes.md +16 -0
  40. package/package/corpus/skills/cratis-screenplay-specifications/verification.json +2 -2
  41. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +2 -2
  42. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +2 -2
  43. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/verification.json +1 -1
  44. package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +19 -10
  45. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +12 -1
  46. package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +55 -3
  47. package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +7 -4
  48. package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +30 -10
  49. package/package/corpus/skills/cratis-screenplay-toolchain/references/production-routes-and-filters.md +119 -0
  50. package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +8 -1
  51. package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +11 -5
  52. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +813 -0
  53. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
  54. package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +7 -5
  55. package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +6 -6
  56. package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +6 -5
  57. package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +56 -28
  58. package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +7 -1
  59. package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +4 -3
  60. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +11 -12
  61. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +14 -3
  62. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/case-tables-and-whole-numbers.md +8 -6
  63. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +3 -1
  64. package/package.json +1 -1
@@ -22,16 +22,16 @@ files is one application: always check the folder, never one file of it.
22
22
 
23
23
  When choosing or upgrading a tool, or checking version-specific capabilities, read `references/versions.md`; it is the only version table, and other skills point to it. For exact diagnostic codes, MCP names/parameters and standalone CLI options, search the large published [references/screenplay-contract.json](references/screenplay-contract.json), pinned by [references/screenplay-contract.version](references/screenplay-contract.version), rather than loading it in full. Locate a diagnostic by its exact `code` (for example `"code": "PLAY0029"`), a tool by its exact `name` (for example `"name": "read-workspace"`), or a command in `cliCommands`; read the matched object for retirement, parameters or options. [references/screenplay-contract-exceptions.json](references/screenplay-contract-exceptions.json) records reasoned exceptions for historical statements; it does not change the current contract.
24
24
 
25
- The standalone pin is Screenplay 4.131.0. CLI 3.46.1 bundles Screenplay 4.130.0,
26
- Stage 4.52.0 and Cratis.Arc.Screenplay 22.54.0. The single version table records
25
+ The standalone pin is Screenplay 4.135.0. CLI 3.50.0 bundles Screenplay 4.131.0,
26
+ Stage 4.67.0 and Cratis.Arc.Screenplay 22.54.0. The single version table records
27
27
  released source evidence and historical probes separately; do not relabel an old
28
28
  render/browser result as a probe of the current packages.
29
29
 
30
30
  Historical screens-release evidence: CLI 3.40.7 / Stage 4.51.1 / bundled
31
31
  Screenplay 4.114.0 opened the canonical corpus with `executableReady true`
32
32
  and the stdio transcript exposed 37 tools; standalone language 4.122.0 was
33
- recorded in that vector. These retained results are not a rerun on CLI 3.46.1
34
- or Screenplay 4.131.0.
33
+ recorded in that vector. These retained results are not a rerun on CLI 3.50.0
34
+ or Screenplay 4.135.0.
35
35
 
36
36
  ## Ground rules
37
37
 
@@ -67,7 +67,7 @@ or Screenplay 4.131.0.
67
67
  | Scope/checks | `--scope <address>`, `--check <names>`; a scoped pass is not whole-application success | Discover installed validation options |
68
68
  | Reference execution | `screenplay test <root>` or MCP `run-specifications` | Discover bundled MCP capability; target tests are not V4 |
69
69
  | MCP | `screenplay mcp <root>`; discover schemas | `cratis screenplay mcp [root]`; registered by `cratis ai install` |
70
- | Render version boundary | Binder admission is not Stage admission | CLI 3.46.1 passes up to ESM v7 to Stage; newer versions: `CLI-RENDER-004` |
70
+ | Render version boundary | Binder admission is not Stage admission | CLI 3.50.0 passes through ESM v10 to Stage construct admission; newer versions: `CLI-RENDER-004` |
71
71
 
72
72
  Read `references/versions.md` when you need the exact messages, exit codes or the MCP roots bug.
73
73
 
@@ -108,9 +108,16 @@ changes with the root folder name.
108
108
  older Stage probes. Current CLI admits v7 to planning, but its v7 corpus gets
109
109
  Stage generated-value/response refusals `STAGE-ESM-028`/`029`, not a blanket
110
110
  compiler refusal. Run admission before claiming a particular model renders.
111
- - **Event sources, streams and routes** bind as ESM v8 at 4.125.0; CLI 3.46.1
112
- render refuses versions above v7 (`CLI-RENDER-004`). Operations and exact numeric
113
- mode remain authorable/unadmitted. Details: `references/sources-and-streams.md`.
111
+ - **Event sources, streams and routes** bind as ESM v8 at 4.125.0.
112
+ CLI 3.50.0/Stage 4.67.0 reaches construct admission through v10, not blanket
113
+ rendering. Operations and exact numeric source mode remain unadmitted.
114
+ Details: `references/sources-and-streams.md` and `references/versions.md`.
115
+ - **Released v9/v10 and published v11:** public contracts and direction select v9;
116
+ reaction identity, production overrides and observer filters select frozen v10;
117
+ qualifying retained non-route Double literals select v11 at 4.135.0.
118
+ Composite view keys remain authoring-only (PLAY0268, #599), while one explicit
119
+ `key` binds. Read `references/production-routes-and-filters.md` and read-surface
120
+ `references/named-keys.md`; version freeze and numeric boundaries: `references/versions.md`.
114
121
 
115
122
  - **Caller/compliance metadata** at 4.127.0: `$identity` aliases caller built-ins;
116
123
  additional identity details are metadata and executable reads still refuse.
@@ -157,8 +164,10 @@ Read [references/diagnostics.md](references/diagnostics.md) when a PLAY, STAGE o
157
164
  still walk lineage. See diagnostics for editor versus C#-only checks.
158
165
  6. Without reaction `runs as` an invoke is caller-less. Declare its trusted role
159
166
  (ESM v10), keep the gate, and reference-test; CLI/Stage support is separate.
160
- 7. Read-model identity is one `query XById => RM optional` with `by xId XId`, and the identifier equal to the
161
- projection's key (see trap 12); never `identifier` on a read model.
167
+ 7. Mark read-model identity with trailing `key`, not `identifier`. Otherwise single-instance
168
+ queries must agree on `by`; only with none and an admitted list query can `*Id`
169
+ inference run. Queryless views need `key` (read-surface `references/named-keys.md`).
170
+ Align projection keys. Multipart keys remain PLAY0268 (#599).
162
171
  8. Projection `key` routes only on `from`; joins never create; `all` is per source.
163
172
  9. `null` only for optional read-model properties in specifications.
164
173
  10. `then` events are exhaustive and ordered; after `when append` they list only what followed.
@@ -12,7 +12,18 @@
12
12
  - PDL quick reference (most forms are compiled in `pdl-example.md` or `cheat-sheet-example.md`; `remove via join` and `$eventContext.occurred` are not)
13
13
  - Specification forms
14
14
 
15
- Current pins: standalone Screenplay 4.131.0 / CLI 3.46.1; `versions.md` is the
15
+ Released boundary forms: `public event X`, `event X from "store"`, Translate
16
+ `direction inbound|outbound`, event-target `projection/reducer P => PublicEvent`,
17
+ and capture `source events` with `from ForeignEvent` select v9. Read
18
+ [public contracts](../../cratis-screenplay-automations-and-translations/references/public-events-and-direction.md).
19
+ View properties use trailing `key`; multipart `by` query/read blocks remain
20
+ PLAY0268 (#599), not v10. Read [named keys](../../cratis-screenplay-read-surface/references/named-keys.md).
21
+ Production `stream Source.Stream` overrides and reaction/reducer `from Source[.Stream]`
22
+ select released v10: [routes and filters](production-routes-and-filters.md).
23
+ Qualifying non-route Double literals select published v11 at 4.135.0;
24
+ `numbers exact` does not bind. See `versions.md` for freeze and numeric boundaries.
25
+
26
+ Current pins: standalone Screenplay 4.135.0 / CLI 3.50.0; `versions.md` is the
16
27
  single table. Compile evidence below keeps its historical tool labels.
17
28
 
18
29
  The syntax lives in compiled example files next to this one (each is a Markdown file holding
@@ -4,6 +4,8 @@
4
4
 
5
5
  - Warnings that hide defects (always validate with `--warnings-as-errors`)
6
6
  - Source reference and identifier checks
7
+ - Public events and translation direction
8
+ - Named keys, production routes and observer filters
7
9
  - Caller identity, compliance and routes
8
10
  - Specification metadata, callers, cases and locators
9
11
  - Guarded interaction diagnostics
@@ -49,6 +51,53 @@ At Screenplay 4.127.0 these are V1 source checks, not binding-only gaps:
49
51
 
50
52
  Legacy compliance spellings (`@pii`/`@sensitive`) do not evade PLAY0515.
51
53
 
54
+ ## Public events and translation direction
55
+
56
+ Current at Screenplay 4.135.0; all are errors. These constructs bind as released
57
+ ESM v9, except public/foreign imports without local shapes (PLAY0268).
58
+
59
+ | Code | Meaning / fix |
60
+ | --- | --- |
61
+ | PLAY0607 | A command produces a public event; move publication to outbound Translate |
62
+ | PLAY0608 | Local public production outside explicit outbound Translate |
63
+ | PLAY0609 | Outbound translation has zero or several local public event types; repeated instances of one type count once |
64
+ | PLAY0610 | Foreign public consumption outside explicit inbound Translate |
65
+ | PLAY0611 | Outbound consumes a public or foreign event; consume private local facts |
66
+ | PLAY0612 | Inbound produces a public or foreign event; produce private local facts |
67
+ | PLAY0613 | Foreign public event produced locally; translate to a private event |
68
+ | PLAY0614 | Public metadata without explicit direction; typed repair declares inbound/outbound only when exactly one direction fits |
69
+ | PLAY0615 | Outbound contains an external-data capture |
70
+ | PLAY0616 | Explicit inbound consumes private or local events instead of public foreign events |
71
+ | PLAY0617 | Outbound produces a private event instead of its one local public type |
72
+ | PLAY0618 | Event-target projection/reducer outside explicit outbound Translate |
73
+ | PLAY0619 | `source events` capture outside explicit inbound Translate |
74
+ | PLAY0620 | Missing, malformed or repeated `from <Event>` in `source events` |
75
+
76
+ Only PLAY0614 in this range has a repair. Legacy directionless translations
77
+ without public metadata stay inbound. PLAY0027 also covers malformed, repeated
78
+ or non-Translate direction. Repair discovery uses `repair-capabilities`, workspace
79
+ `repairs`, then revision-checked `propose-repair`; do not guess a direction.
80
+ See automations-and-translations `references/public-events-and-direction.md`.
81
+
82
+ ## Named keys, production routes and observer filters
83
+
84
+ | Code | Severity | Meaning / fix |
85
+ | --- | --- | --- |
86
+ | PLAY0660 | E | Invalid top-level read-model key owner/modifier/type; multipart parts must be scalar; no repair |
87
+ | PLAY0661 | E | Missing single-instance lookup parts; repair **command reads only** if every missing part has one same-named compatible source, preserving authored mappings and refusing ambiguity |
88
+ | PLAY0662 | E | Invalid block/shape, duplicate or unknown part, incompatible/optional/collection/literal read source; block needs at least two distinct parts; no repair |
89
+ | PLAY0663 | E | Route on reaction/refusal-branch production; only command event productions override routes |
90
+ | PLAY0664 | W | Override repeats complete command route; typed repair removes the redundant override |
91
+ | PLAY0665 | E | Invalid/duplicate/child-bearing/unresolved source/stream filter or filtered reaction with a non-event trigger |
92
+ | PLAY0666 | W | Filter excludes all statically known effective producer routes; C# only, handlers/foreign origins suppress it |
93
+
94
+ Queries and trigger reads have no PLAY0661 repair. Composite view keys, query
95
+ blocks and their fixtures remain PLAY0268 (#599), while one explicit key binds
96
+ byte-identically to inference. Fixtures missing any part report PLAY0351.
97
+ Overrides/filters select released ESM v10; malformed routes also use PLAY0504.
98
+ Read read-surface `references/named-keys.md` and
99
+ [production routes and filters](production-routes-and-filters.md).
100
+
52
101
  ## Caller identity, compliance and routes
53
102
 
54
103
  Source authority: v4.127.0 `diagnostics.md`, `identity.md`, `concepts.md`,
@@ -263,9 +312,12 @@ Report each as `code file:line one-line meaning`; never paste more than about 30
263
312
 
264
313
  ## Render admission (V5): `STAGE-*`, `CLI-RENDER-*`, `STAGE-CRATIS-*`
265
314
  Full table with causes: `renderable-subset.md`. The Stage 4.24.x rows below
266
- retain historical source/probe evidence. Current CLI 3.46.1 admits up to ESM v7
267
- for Stage planning; above that is CLI-RENDER-004. Its v7 corpus is refused by
268
- STAGE-ESM-028 (generated values) and -029 (responses), not the old v7 version gate.
315
+ retain historical source/probe evidence. Current CLI 3.50.0/Stage 4.67.0 admits
316
+ through v10 to construct checks; above it is CLI-RENDER-004 (direct Stage:
317
+ STAGE-ESM-016). Publication STAGE-ESM-032, foreign facts/event captures 033,
318
+ reaction identity 034, reaction filters 035 and production overrides 036 remain
319
+ refused; reducer filters render. Previous CLI 3.46.1 admitted through v7; its
320
+ v7 corpus received STAGE-ESM-028/029, not the older v7 version gate.
269
321
  Codes in the historical snapshot:
270
322
  | Code | Meaning |
271
323
  |---|---|
@@ -1,9 +1,12 @@
1
1
  # Documentation contradictions and which side to trust
2
2
 
3
- Current pins are Screenplay 4.131.0 / CLI 3.46.1 (`versions.md`). This is a
3
+ Current pins are Screenplay 4.135.0 / CLI 3.50.0 (`versions.md`). This is a
4
4
  **historical** contradiction inventory, not a claim that all listed defects still
5
5
  exist. Current grammar documents exact numbers and free description placement;
6
- sources/routes bind as ESM v8; PLAY0515 is a source error; CLI v7 reaches Stage.
6
+ sources/routes bind as ESM v8; PLAY0515 is a source error; CLI admits through
7
+ v10 to Stage construct checks. At `v4.135.0:Documentation/screenplay/interoperability.md:133–137`
8
+ v11 is still labeled "claimed, unreleased"; Versions.cs admits it and decision
9
+ 0066 freezes it on package publication. The corpus follows source and 0066.
7
10
 
8
11
  At v4.127.0 `concepts.md` links the shipped purpose declarations/checks/record
9
12
  but its final identifier section still calls them later phases. `purposes.md`,
@@ -40,11 +43,11 @@ read from source or documentation.
40
43
  | 15 | literal keys | `key literal "global"` vs `key "global"` | both compile; prefer `literal` |
41
44
  | 16 | query admission | `D/queries.md:74` now says live, filtered, scoped and performer queries are not admitted | the binder also rejects collection queries and a missing `by`, which stay undocumented [probed] |
42
45
  | 17 | `@pii` | `D/concepts.md:3,33` "Chronicle applies `@pii` and `@sensitive` rules automatically" | the binder rejects any compliance attribute (PLAY0268); keep it, report V3 blocked. `@sensitive` means an operational secret (`[Encrypted]` + `[NotAudited]`; Screenplay decision 0034); the pinned tools (standalone 4.68.0, bundle 4.66.0) do **not** report `PLAY0515` (`@pii` from 4.69.1, `@sensitive` from 4.84.1): there only Chronicle catches either attribute on an event-source identifier, at build time of the generated code (CHR0034 for `@pii`, CHR0052 for `@sensitive`) |
43
- | 18 | read-model identity | `D/readmodels.md:32` "from the keyed query" | the `by` name must also equal a read-model property (the doc still omits it) |
46
+ | 18 | read-model identity | `D/readmodels.md:32` "from the keyed query" | at 4.135.0 explicit `key` wins; else single-instance queries agree on one read-model `by` property; only with none and an admitted list query does conventional `*Id` inference run (collection-key exclusions: read-surface `references/named-keys.md`). Queryless views need explicit `key` |
44
47
  | 19 | `$strings` constraint messages | `D/constraints.md:31` vs `D/internationalization.md:55` | the compiler keeps the key; realization localizes |
45
48
  | 20 | composite key braces | optional in the EBNF; both forms in docs | both fine |
46
49
  | 21 | counters list | `D/projections/index.md:54` lists only increment and decrement | `count` exists too [probed] |
47
- | 22 | ESM version allocation | older text and decisions 0023 and 0024 give exact numbers, operations, streams and reads fixed numbers (v7 to v11) | use actual released binder selection: v7 generated values/responses, v8 routing, v10 reaction identity at 4.125.0; operations and exact numbers remain unadmitted. Never infer current admission from older proposed allocations |
50
+ | 22 | ESM version allocation | older text and decisions 0023 and 0024 give exact numbers, operations, streams and reads fixed numbers (v7 to v11) | use actual released binder selection: v7 responses, v8 routing, v9 public boundaries, v10 identity/routes/filters, v11 qualifying retained non-route Double literals at 4.135.0; operations and `numbers exact` source mode remain unadmitted. Never infer current admission from older proposed allocations |
48
51
  | 23 | claim conditions | the condition grammar lists `==` | claims need `matches` (PLAY0120) [probed] |
49
52
  | 24 | `numbers exact` | released in 4.64.0 as syntax only, but absent from `D/grammar.md`; documented only in `D/diagnostics.md` (PLAY0508 to PLAY0513) | the compiler: it parses, never binds (PLAY0268, "not admitted by any supported executable model (ESM) version yet"), PLAY0001 on older compilers [probed] |
50
53
  | 25 | command `concurrency` | `D/commands.md:609` says the executable model "does not bind the `concurrency` block yet" | the binder reports PLAY0271 as an **error**, not a silent skip (`SemanticModelBinder.Commands.cs:32-38`) |
@@ -6,15 +6,17 @@
6
6
  - Admitted on both compilers
7
7
  - Admitted from Screenplay 4.61 (ESM v6): standalone tool and cratis 3.28.2 or later
8
8
  - Generated values and responses (ESM v7): standalone 4.68.0 or later only
9
+ - Released public boundaries and observer routes
9
10
  - Code attachments (what binds, what never does)
10
11
  - Refused (code, reason): fix, or record as a mode gap
11
12
  - Not refused, but do not rely on it
12
13
  - Never do this to reach V3
13
14
 
14
- Current pins are Screenplay 4.131.0 / CLI 3.46.1 (`versions.md`). Detailed
15
+ Current pins are Screenplay 4.135.0 / CLI 3.50.0 (`versions.md`). Detailed
15
16
  4.66.0/4.68.0 binder probes below retain their historical labels. Current source
16
- admits sources/streams/routes as ESM v8 and policy negation as ESM v7; operations,
17
- exact numbers and reaction refusals/redelivery remain unadmitted. Use the actual
17
+ admits routes as ESM v8, public/direction constructs as v9, identity/overrides/filters
18
+ as v10 and qualifying non-route Double literals as v11. Operations,
19
+ `numbers exact` source mode and reaction refusals/redelivery remain unadmitted. Use the actual
18
20
  binder before promoting an older probe to a current capability claim.
19
21
 
20
22
  What the binder admits, and what it refuses with which code. The answer depends on the
@@ -66,10 +68,15 @@ Authority: v4.127.0 `context.md`, `identity.md`, `concepts.md`, `events.md`, `pu
66
68
  <commandProperty>`.
67
69
  - `constraint ... unique <prop> on <Event>`. Admission is separate from the open Chronicle
68
70
  durability defects (`versions.md`): never treat admission as proof of uniqueness.
69
- - A `readmodel` with one unambiguous key: one or more keyed queries `query XById => RM optional`
70
- in its slice, all using the same `by xId XId` property, whose name equals a read-model
71
- property (each with optional `authorize`). Two different `by` properties on one read model are
72
- PLAY0268; a list query (`=> RM[]`) is a separate blocker.
71
+ - A `readmodel` with one explicit trailing `key`, or an unambiguous inferred key:
72
+ single-instance queries in the owning slice agreeing on `by xId XId`; only if
73
+ none supplies identity and an admitted list query exists does conventional
74
+ `*Id` inference run (collection-key exclusions: read-surface `references/named-keys.md`).
75
+ Queryless read models need an explicit `key`. Explicit single keys preserve
76
+ equivalent inferred ESM bytes. Composite read-model keys, query `by` blocks and
77
+ their fixtures remain PLAY0268 (#599), not the 4.129.0 authoring delivery's
78
+ executable admission. Collections and observable delivery bind; filters, scope,
79
+ performer and context-derived `by` remain separate blockers.
73
80
  - One projection per read model: `from`, `every`, `all` (one block per level), `join`,
74
81
  `children`, `nested`, `remove with`, `remove via join` (binds; blocks the execution plan at the projection level, see below), `clear with`, counters, `add`,
75
82
  `subtract`, `set`, `clear`, variants, and the identifier mapped from the projection's key (`xId = $eventSourceId` only for an event-source key).
@@ -87,7 +94,7 @@ Authority: v4.127.0 `context.md`, `identity.md`, `concepts.md`, `events.md`, `pu
87
94
  ...` with an explicit `for`. Without a declared actor, a gated invocation denies.
88
95
  On 4.125.0 reaction `runs as system role "<Role>"` supplies the actor and
89
96
  selects ESM v10; keep the gate. CLI 3.41.0's older compiler rejected this syntax;
90
- current CLI 3.46.1's bundle supports it, but render admission still refuses v10.
97
+ CLI 3.50.0's bundle supports it, but Stage refuses reaction identity with STAGE-ESM-034.
91
98
  Standalone reference execution admits it.
92
99
  - Application `trigger` declarations and `when trigger` specifications.
93
100
  - `slice Translate` with `capture` (`key`, `map ... translate`, `append ... when x from "a"
@@ -133,6 +140,19 @@ Stage#201), so they bind and run but are not rendered: gap-fill with the model a
133
140
  - A reaction-invoked command that reaches generation is `Unsupported(IdentityAllocation)`; response-only commands run
134
141
  and discard the response. Generated values give no idempotency, retry or deduplication guarantee.
135
142
 
143
+ ## Released public boundaries and observer routes
144
+
145
+ Public/origin events, explicit Translate direction, event-target builders and
146
+ `source events` captures bind as ESM v9 from 4.117.0. Publication folds execute;
147
+ source-event captures and reached opaque event-target reducers return typed
148
+ Unsupported. Public/foreign imports still lack a local shape and refuse PLAY0268.
149
+ See automations-and-translations `references/public-events-and-direction.md`.
150
+ Production overrides and reaction/reducer filters bind and select released v10;
151
+ filters match routed source/stream names only. Read
152
+ [production routes and filters](production-routes-and-filters.md).
153
+ Qualifying retained non-route Double literals bind/reference-execute as v11 on
154
+ 4.135.0, unlike `numbers exact`; see `versions.md`.
155
+
136
156
  ## Code attachments (what binds, what never does)
137
157
 
138
158
  Inline fences (`csharp`, `typescript`, `react`, `html`, `sql`) and `file <path>` attach
@@ -176,7 +196,7 @@ bodies still leave their owner non-executable.
176
196
  | `Automation` or `Translate` slice, `reaction`, `capture`, `trigger`; `given clock`, `when clock`, `when trigger`, `when capture` | PLAY0268 | **cratis before 3.28.2 bundles only** (4.60.1); messages in `versions.md` |
177
197
  | Unquoted `import Other.Contract` | PLAY0268 | external contract import is not bound |
178
198
  | `pii` or `secret` on any concept (also alias/legacy markers) | PLAY0268 | Compliance requires portable data-subject semantics; scopes/qualifiers do not admit it. Secret provider mapping is `[Encrypted]` + `[NotAudited]`, not a bind/render claim |
179
- | `query` returning a collection (`RM[]`), or without exactly one caller-supplied `by` | PLAY0268 | "must declare one caller-supplied 'by' argument" or "must return one optional read model" |
199
+ | `query` returning a collection (`RM[]`), or without exactly one caller-supplied scalar `by` | PLAY0268 | Current 4.135.0 boundary: composite `by` blocks remain unadmitted (#599); optional scalar snapshot lookup binds |
180
200
  | `observable`, `filter`, `scoped to`, `performer` queries | PLAY0268 | "uses delivery, filtering, scope, or implementation behavior outside the first ESM v1 vertical." `observable` goes in the return position (`=> observable RM optional`); as a body line it is PLAY0048 |
181
201
  | `contains` or `starts with` in conditions | PLAY0268 | equality and numeric ordering only |
182
202
  | Date or DateTime comparison, `today` | PLAY0268 | no runtime date value |
@@ -198,7 +218,7 @@ bodies still leave their owner non-executable.
198
218
  | `generated` or `returns` on a compiler before 4.68.0 (4.66.0 and 4.67.0 refuse; 4.66.0 is bundled in cratis 3.28.x) | PLAY0268 | admitted from standalone 4.68.0 (ESM v7), see above |
199
219
  | Operations or systems, `numbers exact`, reaction refusals/redelivery | PLAY0268 | not admitted by any supported ESM version; one such construct leaves the **whole** application without an executable model. Event sources/streams/routes instead bind as ESM v8 on the current compiler (`sources-and-streams.md`) |
200
220
  | Spec of a gated command or query without `given caller` | PLAY0389 | module and feature gates count |
201
- | `given` or `then readmodel` missing the key property | PLAY0351 | key is the keyed query's `by` |
221
+ | `given` or `then readmodel` missing key parts | PLAY0351 | explicit `key` marks replace inference; composite fixtures need every part but remain unadmitted (#599) |
202
222
  | When-less spec asserting events or errors | PLAY0352 | |
203
223
  | `null` in command or event values | PLAY0350 | Chronicle semantics, not only a binder limit: an optional fact is a separate event (nullable event properties are CHR0012) |
204
224
  | `for` with no unambiguous destination type | PLAY0273 | |
@@ -0,0 +1,119 @@
1
+ <!-- Copyright (c) Cratis. All rights reserved. -->
2
+ <!-- Licensed under the MIT license. See LICENSE file in the project root for full license information. -->
3
+
4
+ # Per-production routes and observer filters (released ESM v10)
5
+
6
+ ## Contents
7
+
8
+ - Command defaults and complete overrides
9
+ - Observer selection
10
+ - Checked source form
11
+ - Admission and evidence
12
+
13
+ ## Command defaults and complete overrides
14
+
15
+ Named event sources/streams and command routes bind as ESM v8 (verified at 4.125.0).
16
+ A routed command's identifier and known destinations must match the source's nominal
17
+ identifier type (PLAY0504). Allocation uses the generated identifier's type, or
18
+ without one requires a UUID-based source. Composite `streamId` routes map every
19
+ named part exactly once; scalar `streamId T` and `streamId = x` remain valid.
20
+ See [sources and streams](sources-and-streams.md) for declarations and encoding.
21
+
22
+ A command's plain, conditional or inline event production can carry its own
23
+ `stream Source.Stream` plus scalar or composite `streamId` mappings. This replaces
24
+ the **whole source, stream and stream id**, for that production only. Other
25
+ productions inherit the command route. Overrides do not supply `for`: state the
26
+ destination explicitly and keep its type compatible with the override's source.
27
+ There is no `no stream` override. A payload `stream = value` remains payload.
28
+ Reaction and refusal-branch productions cannot carry routes (PLAY0663).
29
+
30
+ Resolve the command route and every override eagerly after validation/requirements
31
+ and before generation. An invalid route in a skipped conditional production still
32
+ rejects the command atomically as Contract, leaving no new facts or allocation.
33
+ Mappings accept required nongenerated direct scalar command inputs or literals;
34
+ property paths remain PLAY0268 (#574), generated inputs PLAY0273. A portable
35
+ unkeyed override replaces a keyed command id, never inherits it; a renderer must
36
+ refuse that form if its adapter cannot clear inherited metadata.
37
+
38
+ ## Observer selection
39
+
40
+ A reaction or reducer has at most one leaf `from Source` or `from Source.Stream`.
41
+ It matches stored source/stream names, not stream ids. Unrouted facts never match;
42
+ without a filter, existing observation behavior is unchanged. Direct reaction
43
+ productions, captures and public publication are unrouted. A filtered reaction may
44
+ only have `when Event` triggers on declared events, not clock/application triggers.
45
+ Filters are not available on projections or captures.
46
+
47
+ PLAY0665 rejects malformed, duplicate, child-bearing, unresolved/ambiguous filters
48
+ and non-event triggers. PLAY0666 warns when all statically known producers lie
49
+ outside the filter: include effective production overrides in this check. Handler
50
+ commands and foreign origins are unknown and suppress this C#-only warning.
51
+ A filtered opaque reducer returns typed Unsupported when matching given history
52
+ or the when-step reaches a transition; ignoring its body cannot prove absence.
53
+
54
+ ## Checked source form
55
+
56
+ The override and filter select ESM v10. The second production keeps the command
57
+ default, while Booked is routed to Notes and can trigger Follow:
58
+
59
+ ```screenplay
60
+ concept AccountId : String
61
+ eventsource Account
62
+ identifier AccountId
63
+ stream Base
64
+ streamId String
65
+ stream Notes
66
+ streamId String
67
+ module Accounts
68
+ feature Booking
69
+ slice StateChange Book
70
+ command Book
71
+ accountId AccountId identifier
72
+ period String
73
+ stream Account.Base
74
+ streamId = period
75
+ produces event Booked
76
+ for accountId
77
+ stream Account.Notes
78
+ streamId = period
79
+ produces event BookRecorded
80
+ for accountId
81
+ slice Automation FollowBooking
82
+ event Followed
83
+ reaction Follow
84
+ from Account.Notes
85
+ when Booked
86
+ produces Followed
87
+ specification RoutedReaction
88
+ when append Booked
89
+ for "account-1"
90
+ stream Account.Notes
91
+ streamId = "2026-10"
92
+ then Followed
93
+ no stream
94
+ ```
95
+
96
+ For a composite override, the child form is `streamId` followed by every
97
+ `part = inputOrLiteral`. Mapping order does not change part correspondence.
98
+ Specification routes describe effective facts, not only the command default.
99
+ Cover inherited versus overridden routes, atomic skipped-route failure, matching
100
+ and wrong source/stream, and unrouted input. Read [specification route forms](sources-and-streams.md).
101
+
102
+ ## Admission and evidence
103
+
104
+ ESM v10 was first published in 4.125.0 (reaction system identity). Production
105
+ routes and observer filters shipped in 4.129.0. Decision 0066 records that already
106
+ shipped extension as a retroactive exception; all three are now one frozen v10
107
+ contract. A consumer admitting v10 must include all three, not just identity.
108
+ Composite **read-model** keys are separate and remain unadmitted (PLAY0268, #599).
109
+
110
+ Previous CLI 3.46.1/Stage 4.52.0 refused versions above v7 before planning.
111
+ CLI 3.50.0/Stage 4.67.0 admits through v10 to construct checks: production overrides
112
+ still refuse STAGE-ESM-036 and reaction filters STAGE-ESM-035; reducer filters render.
113
+ A supported version number alone never proves target support or a passing render.
114
+
115
+ Source: Screenplay `v4.135.0:Documentation/screenplay/{event-sources,readmodels,reactions,diagnostics}.md`,
116
+ decisions 0061–0063/0066 and canonical corpus
117
+ `Source/DotNET/Screenplay.CanonicalCorpus/Corpus/EventRoutes/{production-routes,observer-filters}/source/`.
118
+ Stage `v4.67.0:Source/Rendering.Cratis/Semantics/{SemanticVersionFeatures,SemanticVersionFeatureAdmission}.cs`;
119
+ CLI `v3.50.0:Source/Cli/Commands/Render/RenderedSemanticVersions.cs`.
@@ -28,7 +28,14 @@ is adapted with the agreement of Martin Dilger and Nebulit GmbH.
28
28
 
29
29
  ## Sources read for facts
30
30
 
31
- - Current pin update: Screenplay `v4.131.0` (`71f3ef37`), published
31
+ - Current public/keys/routes/version update: Screenplay `v4.135.0` (`b4e46130`),
32
+ unchanged release contract, `Semantics/Versions.cs`, `Documentation/screenplay/{events,slices,captures,readmodels,queries,event-sources,diagnostics,interoperability}.md`,
33
+ decisions 0049–0051 and 0060–0066. Composite view keys remain PLAY0268 (#599);
34
+ v11 literal lowering is admitted despite interoperability's unreleased label.
35
+ CLI `v3.50.0` (`546dea12`) pins Stage 4.67.0 and Screenplay 4.131.0;
36
+ `RenderedSemanticVersions.cs` and Stage's version-feature admission were read,
37
+ not executed as a new render/browser vector.
38
+ - Previous pin update: Screenplay `v4.131.0` (`71f3ef37`), published
32
39
  `screenplay-contract.json`, `Source/DotNET/Screenplay.Mcp/{McpRevisionDiff,McpWorkspaces.Comparison,McpToolSchemas}.cs`
33
40
  and `Documentation/screenplay/mcp/reference.md`; CLI `v3.46.1` (`73578fbf`)
34
41
  `Directory.Packages.props`, `RenderedSemanticVersions.cs`, `RenderSettings.cs`,
@@ -7,13 +7,19 @@
7
7
  - Ownership, publication and recovery
8
8
  - Reading V5
9
9
 
10
- Current pins: standalone Screenplay 4.131.0; CLI 3.46.1 bundles Screenplay
11
- 4.130.0 and Stage 4.52.0 (`versions.md`). CLI admits ESM v7 to Stage planning;
12
- above v7 is CLI-RENDER-004. The historical v7 canonical-corpus check got
10
+ Current pins: standalone Screenplay 4.135.0; CLI 3.50.0 bundles Screenplay
11
+ 4.131.0 and Stage 4.67.0 (`versions.md`). CLI/Stage admit through v10 to construct
12
+ checks, not blanket rendering; above v10 is CLI-RENDER-004 (direct Stage:
13
+ STAGE-ESM-016). v9 publication/foreign facts and v10 reaction identity,
14
+ reaction filters and production overrides still refuse STAGE-ESM-032–036;
15
+ reducer filters render. v8 routes reach specific checks (including routed
16
+ read-model/query replay refusal STAGE-ESM-030). Case tables and v8+ `long`
17
+ whole numbers apply to the current default. Previous CLI 3.46.1/Stage 4.52.0
18
+ admitted only through v7 and applied neither newer rule. The historical v7 canonical-corpus check got
13
19
  STAGE-ESM-028/029 for generated values/responses
14
20
  (`v3.41.0:Source/Cli.Specs/for_ScreenplayPlanning/when_planning_an_esm_v7_model.cs`).
15
21
  The following detailed Stage 4.24.x results are **historical**, not reverified
16
- 4.52.0 claims. Run the bundled renderer before asserting current renderability.
22
+ 4.67.0 claims. Run the bundled renderer before asserting current renderability.
17
23
 
18
24
  Historical sources, all read at tags: Stage v4.24.1 `Source/Rendering.Cratis/Semantics/SemanticSurfaceLedger.cs`
19
25
  (an exhaustive map of every ESM member to Rendered, Rejected(code) or Ignored),
@@ -61,7 +67,7 @@ accepted with PLAY0565 information); either still refuses binding. Identity bloc
61
67
  purposes and event `subject` are authoring metadata, not provider realization;
62
68
  executing identity detail reads still refuses PLAY0268. Current source/stream
63
69
  routes are admitted as v8, including composite ids, not the historical binding
64
- refusal above; CLI 3.46.1 still refuses versions above v7. Never split hand-joined
70
+ refusal above; current CLI 3.50.0 reaches Stage's v8 route checks. Never split hand-joined
65
71
  legacy ids or drop protected ids into routing to fit a renderer (PLAY0515).
66
72
 
67
73
  ## Authoring consequences in renderable mode