@cratis/pi 7.32.0 → 7.34.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 (176) hide show
  1. package/package/corpus/agents/screenplay-modeler.md +1 -1
  2. package/package/corpus/agents/screenplay-renderer.md +1 -1
  3. package/package/corpus/agents/screenplay-reviewer.md +1 -1
  4. package/package/corpus/agents/slice-implementer.md +1 -1
  5. package/package/corpus/rules/profiles.md +1 -0
  6. package/package/corpus/skills/cratis-application-slice-conformance/LICENSE +2 -2
  7. package/package/corpus/skills/cratis-application-slice-conformance/SKILL.md +5 -0
  8. package/package/corpus/skills/cratis-application-slice-conformance/references/checklists.md +12 -0
  9. package/package/corpus/skills/cratis-application-slice-conformance/references/provenance.md +3 -4
  10. package/package/corpus/skills/cratis-application-slice-specifications/LICENSE +2 -2
  11. package/package/corpus/skills/cratis-application-slice-specifications/references/provenance.md +2 -3
  12. package/package/corpus/skills/cratis-arc-react-page/LICENSE +2 -2
  13. package/package/corpus/skills/cratis-arc-react-page/references/provenance.md +2 -3
  14. package/package/corpus/skills/cratis-chronicle-event-modeling/SKILL.md +12 -6
  15. package/package/corpus/skills/cratis-chronicle-reactor/LICENSE +2 -2
  16. package/package/corpus/skills/cratis-chronicle-reactor/SKILL.md +5 -2
  17. package/package/corpus/skills/cratis-chronicle-reactor/references/provenance.md +3 -3
  18. package/package/corpus/skills/cratis-chronicle-reactor/references/slice-delivery-checklist.md +93 -0
  19. package/package/corpus/skills/cratis-chronicle-read-model-specifications/LICENSE +2 -2
  20. package/package/corpus/skills/cratis-chronicle-read-model-specifications/SKILL.md +1 -1
  21. package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/provenance.md +3 -3
  22. package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/view-lifecycle-checks.md +79 -0
  23. package/package/corpus/skills/cratis-event-model-diagram/LICENSE +7 -0
  24. package/package/corpus/skills/cratis-event-model-diagram/SKILL.md +26 -2
  25. package/package/corpus/skills/cratis-event-model-diagram/references/provenance.md +19 -0
  26. package/package/corpus/skills/cratis-screenplay-automations-and-translations/LICENSE +2 -2
  27. package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +16 -11
  28. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +1 -1
  29. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +7 -7
  30. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +1 -1
  31. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/provenance.md +5 -6
  32. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/public-events-and-direction.md +2 -3
  33. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +9 -5
  34. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +6 -6
  35. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translate-example.md +1 -1
  36. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +16 -15
  37. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/invocation-identity.md +2 -2
  38. package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +20 -19
  39. package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +3 -1
  40. package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +1 -1
  41. package/package/corpus/skills/cratis-screenplay-command-surface/references/enum-numbers.md +93 -0
  42. package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +5 -6
  43. package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +4 -2
  44. package/package/corpus/skills/cratis-screenplay-delivery-planning/LICENSE +9 -0
  45. package/package/corpus/skills/cratis-screenplay-delivery-planning/SKILL.md +118 -0
  46. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/parallel-delivery.md +45 -0
  47. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/provenance.md +29 -0
  48. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/slice-counting.md +43 -0
  49. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/velocity-and-capacity.md +48 -0
  50. package/package/corpus/skills/cratis-screenplay-delivery-planning/verification.json +16 -0
  51. package/package/corpus/skills/cratis-screenplay-discovery/LICENSE +2 -2
  52. package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +6 -5
  53. package/package/corpus/skills/cratis-screenplay-discovery/references/divergent-sweep.md +1 -0
  54. package/package/corpus/skills/cratis-screenplay-discovery/references/domain-analysis-template.md +92 -0
  55. package/package/corpus/skills/cratis-screenplay-discovery/references/personas-and-causes.md +2 -2
  56. package/package/corpus/skills/cratis-screenplay-discovery/references/provenance.md +4 -3
  57. package/package/corpus/skills/cratis-screenplay-discovery/verification.json +1 -1
  58. package/package/corpus/skills/cratis-screenplay-event-modeling/LICENSE +2 -2
  59. package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +30 -29
  60. package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +7 -5
  61. package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +13 -10
  62. package/package/corpus/skills/cratis-screenplay-event-modeling/references/provenance.md +2 -3
  63. package/package/corpus/skills/cratis-screenplay-legacy-extraction/LICENSE +2 -2
  64. package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +26 -13
  65. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/candidate-inventory.md +6 -1
  66. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +7 -0
  67. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/prologue-safety.md +22 -17
  68. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/provenance.md +2 -3
  69. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md +2 -2
  70. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/side-car-migration.md +1 -0
  71. package/package/corpus/skills/cratis-screenplay-legacy-extraction/verification.json +1 -1
  72. package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +25 -25
  73. package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +8 -2
  74. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +8 -3
  75. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +38 -8
  76. package/package/corpus/skills/cratis-screenplay-model-authoring/references/property-links.md +126 -0
  77. package/package/corpus/skills/cratis-screenplay-model-authoring/references/screen-authoring-workflow.md +3 -4
  78. package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +1 -1
  79. package/package/corpus/skills/cratis-screenplay-model-review/LICENSE +2 -2
  80. package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +8 -8
  81. package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +2 -2
  82. package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +4 -4
  83. package/package/corpus/skills/cratis-screenplay-model-review/references/model-inventory-report.md +75 -0
  84. package/package/corpus/skills/cratis-screenplay-model-review/references/provenance.md +3 -4
  85. package/package/corpus/skills/cratis-screenplay-model-review/references/public-keys-and-routes.md +1 -1
  86. package/package/corpus/skills/cratis-screenplay-model-review/references/worked-example.md +4 -3
  87. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/LICENSE +2 -2
  88. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +7 -5
  89. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/core-rules-digest.md +131 -0
  90. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/phases.md +1 -1
  91. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/provenance.md +25 -4
  92. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/reasoning-notes.md +2 -2
  93. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/verdicts-and-modes.md +1 -1
  94. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +5 -4
  95. package/package/corpus/skills/cratis-screenplay-projections/SKILL.md +9 -5
  96. package/package/corpus/skills/cratis-screenplay-projections/references/pdl-grammar.md +4 -2
  97. package/package/corpus/skills/cratis-screenplay-read-surface/LICENSE +7 -0
  98. package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +16 -8
  99. package/package/corpus/skills/cratis-screenplay-read-surface/references/provenance.md +21 -0
  100. package/package/corpus/skills/cratis-screenplay-read-surface/references/screen-patterns.md +130 -0
  101. package/package/corpus/skills/cratis-screenplay-read-surface/verification.json +1 -1
  102. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/LICENSE +2 -2
  103. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +60 -47
  104. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/delivery-protocol.md +17 -2
  105. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/drift-and-ledger.md +19 -2
  106. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +24 -6
  107. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/provenance.md +2 -3
  108. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +21 -16
  109. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/worked-example.md +34 -29
  110. package/package/corpus/skills/cratis-screenplay-scenario-coverage/LICENSE +2 -2
  111. package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +5 -4
  112. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +1 -1
  113. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +5 -4
  114. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-example.md +32 -3
  115. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/provenance.md +3 -4
  116. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-catalogue.md +7 -6
  117. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md +3 -3
  118. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-workshop.md +15 -7
  119. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +11 -10
  120. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/view-and-story-specs.md +6 -4
  121. package/package/corpus/skills/cratis-screenplay-slice-design/LICENSE +2 -2
  122. package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +4 -3
  123. package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +2 -2
  124. package/package/corpus/skills/cratis-screenplay-slice-design/references/derived-condition-events.md +68 -0
  125. package/package/corpus/skills/cratis-screenplay-slice-design/references/field-lineage.md +1 -1
  126. package/package/corpus/skills/cratis-screenplay-slice-design/references/provenance.md +5 -5
  127. package/package/corpus/skills/cratis-screenplay-slice-design/references/read-model-design.md +17 -0
  128. package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +6 -6
  129. package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +3 -3
  130. package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +7 -5
  131. package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +4 -3
  132. package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md +3 -2
  133. package/package/corpus/skills/cratis-screenplay-specifications/references/persona-callers-and-cases.md +3 -0
  134. package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +3 -2
  135. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/LICENSE +2 -2
  136. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +14 -11
  137. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +31 -3
  138. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/chronicle-boundaries.md +6 -6
  139. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +12 -11
  140. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/evolution.md +18 -1
  141. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/provenance.md +4 -4
  142. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +1 -1
  143. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +1 -1
  144. package/package/corpus/skills/cratis-screenplay-toolchain/LICENSE +2 -2
  145. package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +29 -18
  146. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +3 -3
  147. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +7 -4
  148. package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +21 -2
  149. package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +5 -3
  150. package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +32 -18
  151. package/package/corpus/skills/cratis-screenplay-toolchain/references/production-routes-and-filters.md +1 -1
  152. package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +3 -4
  153. package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +46 -16
  154. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract-exceptions.json +1 -1
  155. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +1092 -17
  156. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
  157. package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +1 -1
  158. package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +8 -8
  159. package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +18 -13
  160. package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +41 -20
  161. package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +7 -2
  162. package/package/corpus/skills/cratis-screenplay-ui-composition/LICENSE +2 -2
  163. package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +10 -10
  164. package/package/corpus/skills/cratis-screenplay-ui-composition/references/flow-review.md +1 -1
  165. package/package/corpus/skills/cratis-screenplay-ui-composition/references/provenance.md +2 -3
  166. package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +41 -16
  167. package/package/corpus/skills/cratis-screenplay-ui-composition/references/worked-flow.md +17 -9
  168. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +85 -77
  169. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +65 -16
  170. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/case-tables-and-whole-numbers.md +2 -2
  171. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/render-example.md +3 -1
  172. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +30 -15
  173. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +21 -1
  174. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +9 -4
  175. package/package/profile-catalog.json +1 -0
  176. package/package.json +1 -1
@@ -3,6 +3,7 @@
3
3
  ## Contents
4
4
 
5
5
  - Establish the boundary, not an organizational formula
6
+ - Ownership by design (optional lens)
6
7
  - Ownership interview
7
8
  - Ownership and interface inventory
8
9
  - Cross-boundary walkthrough
@@ -29,6 +30,28 @@ decision visible in the session `STATE.md`; never report independence as establi
29
30
  splitting a boundary revisit every invariant that needs information from both sides: an event
30
31
  exchange does not make that decision atomic.
31
32
 
33
+ ## Ownership by design (optional lens)
34
+ Conway's observation is that systems come to mirror the teams that build them. Use it as a
35
+ deliberate lens when you shape boundaries, not as a law: decide the ownership you want and let the
36
+ boundaries follow it, instead of discovering later that the org chart set them.
37
+
38
+ - When one team will own a boundary end to end, treat the module as that team's system: it owns
39
+ its commands, the events it produces, the read models it maintains and the systems it calls.
40
+ Other teams interact only through its public events and its capture contracts, so each side can
41
+ be built, scaled and released on its own, coordinating through events rather than meetings.
42
+ - A system this process integrates with is, by definition, owned by someone else. Record that
43
+ owner next to the public fact or capture contract; it is the person you ask before changing it.
44
+ - Treat "team = system" as a hypothesis to test with the interview answers, not as a default. One
45
+ team may own several modules, a module may be shared during a transition, and a team boundary
46
+ does not make a decision atomic across it (see above). Write down which the model follows.
47
+
48
+ **Indirect producers.** When a fact reaches a receiver through an intermediate boundary (the
49
+ booking system's `BerthBooked` drives billing, whose `StayInvoiceDue` then reaches the harbour
50
+ office), attribute each public event to the boundary that decides it, and name the original
51
+ producer in the consumer's description as the indirect source. Ownership of the public contract
52
+ stays with the boundary that decides the fact; the indirect source tells a reader whom a change
53
+ upstream will surprise.
54
+
32
55
  ## Ownership interview
33
56
  Run it when ownership, autonomy or integration decisions are missing; skip it when the user or
34
57
  the model already states all three. Ask one question at a time, offer the options, and follow
@@ -136,14 +159,19 @@ integration support.
136
159
  internal step.
137
160
  - Treat a public event like a published API: evolution follows `evolution.md` with the
138
161
  consumers named, and breaking changes become new events.
139
- - Screenplay has no public/internal marker. Record the classification in the event's
140
- `documentation`, and keep the list in `STATE.md`.
162
+ - Events are private by default. Mark a public contract with `public event X` (ESM v9, released in
163
+ Screenplay 4.117.0); declare a foreign public event's shape locally with `event X from "store"`.
164
+ A command never produces a public event (PLAY0607/0613); crossing the boundary is a `Translate`
165
+ slice with an explicit direction (`cratis-screenplay-automations-and-translations`
166
+ `references/public-events-and-direction.md`). Nothing checks that the foreign shape matches the
167
+ other store, so also name the consumers in the event's `documentation` and keep the list in
168
+ `STATE.md`. Stage 4.73.1 refuses public events (`STAGE-ESM-032`).
141
169
 
142
170
  ## Crossing a boundary in Screenplay
143
171
  | Situation | Construct |
144
172
  |---|---|
145
173
  | another module in the same application | reference the event by name (cross-module resolution works within one application) |
146
- | another bounded context's contract | unquoted `import Context.Event` (foreign contract; does not bind on either compiler, PLAY0268; see `versions.md` in `cratis-screenplay-toolchain`) |
174
+ | another bounded context's contract | `event X from "store"` (shape declared locally, ESM v9); an unquoted `import Context.Event` or `import Q.X from "store"` has no local shape and stays PLAY0268 (see `versions.md` in `cratis-screenplay-toolchain`) |
147
175
  | my own files | quoted `import "glob"` |
148
176
  | outside data entering | `Translate` slice: `capture`, or a translator `reaction` over an imported event (`cratis-screenplay-automations-and-translations`) |
149
177
  | our fact another context needs | a public summary event; the other side translates it into its own language |
@@ -5,16 +5,16 @@ target facts; the `.play` model declares only part of them (`versions.md` in
5
5
  `cratis-screenplay-toolchain`).
6
6
 
7
7
  ## Pins
8
- Chronicle **v19.32.0** (`f17a2ff`): CHR0012 (nullable event properties) and CHR0034 (PII on an
9
- event-source id) are present. Three runtime defects are **open at v19.32.0**: #3744 (SQL and
8
+ Chronicle **v19.50.0** (first read at v19.32.0 `f17a2ff`): CHR0012 (nullable event properties) and CHR0034 (PII on an
9
+ event-source id) are present. Three runtime defects are **open at v19.50.0**: #3744 (SQL and
10
10
  InMemory providers do not settle unique claims), #4123 (constraint index updates run after commit
11
11
  and fail silently) and #4131 (composite unique constraints collide when a component contains the
12
- separator). Arc **v22.50.5** has `[ProtectedDecision]` (since v22.39.0, needs Chronicle 19.23 or
13
- later); Stage 4.51.3 rendered apps pin Arc 22.50.5 and Chronicle client/kernel
14
- 19.32.0, so the APIs are available to gap-fill, not automatically emitted or
12
+ separator). Arc **v22.72.0** has `[ProtectedDecision]` (since v22.39.0, needs Chronicle 19.23 or
13
+ later); Stage 4.73.1 rendered apps pin Arc 22.68.0 and Chronicle client/kernel
14
+ 19.45.0, so the APIs are available to gap-fill, not automatically emitted or
15
15
  protected (see `consistency-and-concurrency.md` section 3). Re-check the issues before relying on a
16
16
  constraint in a new release.
17
- A concurrency scope's first append is unchecked by default at v19.32.0; see
17
+ A concurrency scope's first append is unchecked by default at v19.50.0 (the default is planned to become checked in the next major, `Documentation/events/concurrency.mdx`); see
18
18
  SKILL.md, ‘First append into a scope’.
19
19
 
20
20
  ## Identity, routing and claims
@@ -64,7 +64,7 @@ observed legacy check from verified atomic protection.
64
64
  Never accept the caller's copy of the state: `currentStatus Status` on the command with
65
65
  `require currentStatus == "approved"` protects nothing, and neither does a boolean attestation
66
66
  input (`confirmsX == true`) standing in for the rule. Never move the rule into `handler` or
67
- `implementation hint` prose; a description is not rendered (Stage#178), so prose alone leaves
67
+ `implementation hint` prose; a description renders only as an XML doc comment (Stage#178), so prose alone leaves
68
68
  the rule unenforced in rendered scope.
69
69
 
70
70
  Right: write the rule as stated intent and mark it unenforced.
@@ -74,7 +74,7 @@ Right: write the rule as stated intent and mark it unenforced.
74
74
  - Slice `description`: one short marker per rule, `NOT enforced in the model today; target: <mechanism>`.
75
75
  - Slice fenced `documentation`, one block per rule:
76
76
  - Requirement: the business rule in business words.
77
- - Status: NOT enforced in the model today (Screenplay#129, #209).
77
+ - Status: NOT enforced in the model today (Screenplay#129).
78
78
  - Decision inputs: the authoritative facts or state.
79
79
  - Missing guarantee: why the construct does not protect the decision.
80
80
  - Race consequence: what two individually plausible commands could jointly violate.
@@ -106,11 +106,11 @@ empty or `$eventSourceId`). Reducers, joins, children, nested sources and **even
106
106
  routing** (fan-in from many streams by a payload reference) are refused, and a concurrency scope
107
107
  on the referenced source does not see appends made on other sources. A rule over such a view, for
108
108
  example a course capacity computed from enrolment streams, needs option a or b: write the
109
- deciding fact on the source that owns the state, or give each scarce item its own identity. Sources: Arc `v22.50.5:Documentation/backend/csharp/chronicle/read-models/injecting-into-commands.md`;
109
+ deciding fact on the source that owns the state, or give each scarce item its own identity. Sources: Arc `v22.72.0:Documentation/backend/csharp/chronicle/read-models/injecting-into-commands.md` (limits unchanged since v22.50.5);
110
110
  `chronicle-boundaries.md`.
111
111
 
112
- **Availability in Stage-rendered applications.** Stage v4.51.3 scaffolds Arc 22.50.5
113
- and Chronicle client/kernel 19.32.0. `[ProtectedDecision]` and `DecisionRead<T>` /
112
+ **Availability in Stage-rendered applications.** Stage 4.73.1 scaffolds Arc 22.68.0
113
+ and Chronicle client/kernel 19.45.0 (not the latest releases). `[ProtectedDecision]` and `DecisionRead<T>` /
114
114
  `IDecisionReads` exist in that package set; source checks are in
115
115
  `cratis-stage-rendering-and-sandbox` `references/rendered-application.md`.
116
116
  This does not mean Stage emits protected decisions. Gap-fill must opt into the
@@ -119,7 +119,7 @@ read in the active unit of work. For refused shapes choose option a/b (state on
119
119
  its owning stream or one identity per scarce item), or agreed compensation c.
120
120
  Keep the rule **NOT enforced in the model today** with its race consequence.
121
121
  Never infer protection from `.play` `reads` + `require`, weaken the rule to render,
122
- or edit managed dependency files. Older Stage 4.24.x scaffolds predate these APIs.
122
+ or edit managed dependency files. Older Stage 4.24.x scaffolds predate these APIs. Arc 22.72.0 and Chronicle 19.50.0 are the latest releases; the scaffold does not move with them.
123
123
 
124
124
  ## 4. Concurrency scenarios
125
125
  For each enforced or recorded rule write three short scenarios:
@@ -185,11 +185,12 @@ behaviour. Write the answer in the slice `documentation`.
185
185
  date views and rules use. Constraints and reactions still see record order.
186
186
 
187
187
  ## 10. Specification limits (no local spec engine)
188
- - A spec can show a source re-claiming its own value and a `unique event` violation. Whether
189
- it can show a collision between two different sources is contested in the docs:
190
- `constraints.md` says not yet, `specifications.md` says `for` on `given` events allows it. Treat
191
- such a spec as parsed (V1), not proven; spec outcomes come only from a reference run (V4) or
192
- rendered tests. See `cratis-screenplay-scenario-coverage`.
188
+ - A spec can show a source re-claiming its own value, a `unique event` violation and a collision
189
+ between two different sources: `for` on `given` events (ESM v2) establishes a claim on one source
190
+ and attempts the same value on another (`specifications.md`; `streams-example.md` uses it). It is a
191
+ sequential history, not a race proof. The `constraints.md` sentence that it "cannot yet show a
192
+ collision between two event sources" is stale (`cratis-screenplay-toolchain` `references/doc-contradictions.md`).
193
+ Spec outcomes come only from a reference run (V4) or rendered tests. See `cratis-screenplay-scenario-coverage`.
193
194
  - Constraint violation messages are fixed strings: copy them exactly into `then error`.
194
195
  - For every value constraint write a competing-claim spec (one source owns the value, a
195
196
  different source attempts it) using `when <Command>` with the earlier fact as `given`.
@@ -27,6 +27,23 @@ compatibility scenarios below first; the identity owner then applies the change
27
27
  A test for "generation or new event": a new version must be convertible from the old one
28
28
  without inventing facts. If it is not, it is a different event.
29
29
 
30
+ ## Enum identities are stored contracts
31
+
32
+ Unnumbered enums use zero-based declaration positions: a reorder or insertion can
33
+ reinterpret stored numbers. Before reordering or removing members, pin each to its
34
+ **existing stored number**, not its new position. `propose-number-enum-members`
35
+ pins an unnumbered enum to current positions; use it before changing order, only
36
+ when those positions match storage. Never renumber or reuse a published member's
37
+ number. Removing a member still needs replay and mixed-reader compatibility decisions.
38
+
39
+ Numbered members may have sparse or negative unique int32 values, all or none per
40
+ enum. Source authoring shipped in 4.137.0; non-positional numbers bind as ESM v12
41
+ in 4.139.0. Positional pins retain older executable bytes/version. CLI 3.53.1 and
42
+ Stage 4.73.1 bundle 4.137.0 and do not admit v12; keep the pins and report the gap.
43
+ Short-lived input/view-only enums may remain positional. Use opt-in
44
+ `--check enum-pinning` (PLAY0671) to find unnumbered enums used by event properties.
45
+ Syntax/example and source evidence: command-surface [enum numbers](../../cratis-screenplay-command-surface/references/enum-numbers.md).
46
+
30
47
  ## Compatibility scenarios (write before editing)
31
48
  For each changed event, answer in the slice `documentation` or `STATE.md`:
32
49
  1. **Replay**: does every projection still build from generation 1 facts? Which value do old
@@ -60,7 +77,7 @@ Procedure and ownership: the identity procedure in `cratis-screenplay-modeling-l
60
77
  owning session, or a brief that asks for the rename, applies it; a subagent without MCP returns
61
78
  the catalog-changing request to the owner; never leave a requested change silently unapplied).
62
79
  - Several generations select ESM v4; that binds executably on both tools (compiled
63
- with `evolution-example.md`). Stage 4.24.2 admits v4 but refuses any evolved event and its
80
+ with `evolution-example.md`). Stage (still, at 4.73.1) admits v4 but refuses any evolved event and its
64
81
  dependent scope with `STAGE-ESM-026` (it cannot render event-type migrations yet, Stage#204,
65
82
  which depends on Screenplay#71), and its runtime still refuses evolved events: the evolved
66
83
  events are gap-fill, with migrations hand-written per `cratis-chronicle-event-type-migration`.
@@ -11,11 +11,10 @@
11
11
 
12
12
  Event Modeling practice is by Adam Dymitruk and Martin Dilger, cited as practice; no text taken.
13
13
 
14
- ## Adapted closely (Martin Dilger and Nebulit GmbH, with agreement)
14
+ ## Adapted closely (Martin Dilger and Nebulit GmbH)
15
15
 
16
16
  Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
17
- by Martin Dilger and Nebulit GmbH (https://nebulit.de). The repository carries no licence file; this material
18
- is adapted with the agreement of Martin Dilger and Nebulit GmbH.
17
+ by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
19
18
 
20
19
  | Source file | Used in | How |
21
20
  |---|---|---|
@@ -23,5 +22,6 @@ is adapted with the agreement of Martin Dilger and Nebulit GmbH.
23
22
  | `.claude/skills/eventmodeling-optimizing-stream-design`, patterns reference: decision tree, red flags 2-4, composite and collection and log patterns | `references/stream-patterns.md` "Boundary decision tree", "Red flags", "Boundary patterns by domain" | adapted closely, restored from #493; red flag 1 ("no natural end") dropped because it contradicts long-lived identities; event-granularity tip dropped (generic update events are a defect here) |
24
23
  | `.claude/skills/eventmodeling-optimizing-stream-design`, domain-patterns reference: per-domain identity entries | `references/stream-patterns.md` "Boundary patterns by domain" | translated to invoicing, marina, memberships, enrolment and hire; lifetimes and archival splits dropped |
25
24
  | `.claude/skills/eventmodeling-applying-conways-law/SKILL.md`: interview questions with follow-up triggers, six-step ownership workflow, quality checklist | `references/boundaries.md` "Ownership interview", "Ownership and interface inventory", "Responsibility matrix and ownership timeline", "Boundary checklist" | adapted closely; "team = system" absolutes deliberately not adopted, kept "not by law" |
26
- | `.claude/skills/eventmodeling-applying-conways-law`, examples reference: responsibility matrix, swimlane timeline, inter-system communication | `references/boundaries.md` "Responsibility matrix and ownership timeline", "Worked walkthrough" | translated to marina and invoicing; Martin Dilger and Nebulit GmbH's indirect-producer attribution not copied |
25
+ | `.claude/skills/eventmodeling-applying-conways-law`, examples reference: responsibility matrix, swimlane timeline, inter-system communication | `references/boundaries.md` "Responsibility matrix and ownership timeline", "Worked walkthrough" | translated to marina and invoicing (see the next row for the indirect-producer attribution) |
27
26
  | `.claude/skills/eventmodeling-core-rules/SKILL.md`: immutability, calculated-event anti-pattern, causality, open question versus decided failure, "left chair" fan-out, offline-first | `references/stream-patterns.md` "Core rules that bear on stream design", `SKILL.md` modeling defaults | adapted closely, translated to Screenplay constructs; board lanes, linked copies and role catalog not adopted here (other skills own them) |
27
+ | `.claude/skills/eventmodeling-applying-conways-law/SKILL.md`, examples reference: team and system boundary as one, indirect-producer attribution | `references/boundaries.md` "Ownership by design (optional lens)" | Adapted closely as an optional lens with the "team = system" claim kept as a hypothesis to test; indirect-producer attribution adopted for public events, with ownership staying with the deciding boundary |
@@ -216,7 +216,7 @@ Some event stores decide consistency by a query over tagged events instead of on
216
216
  check to event types, source type or stream (`concurrency` block, Screenplay
217
217
  `commands.md`). Legacy concurrency metadata still fails binding (PLAY0271),
218
218
  but sources/streams/routes bind and reference-execute as ESM v8 on 4.125.0.
219
- Route admission does not make a view read protected. CLI 3.50.0 reaches Stage construct checks
219
+ Route admission does not make a view read protected. The pinned CLI (toolchain `references/versions.md`) reaches Stage construct checks
220
220
  through v10; see toolchain `references/versions.md`. Model the stream by business
221
221
  identity; when a rule truly needs a cross-stream decision, record it (see
222
222
  `consistency-and-concurrency.md`) rather than inventing a construct.
@@ -164,7 +164,7 @@ module Courses
164
164
  then denied
165
165
 
166
166
  slice StateChange EnrolMember
167
- description "Atomic here: one active enrolment per member and course (composite unique constraint, released by withdrawal), and one MemberEnrolled per enrolment stream, so a retry with the same enrolment id after a lost reply cannot enrol twice (the composite constraint alone lets a source re-claim its own value). NOT enforced in the model today: 'enrolments never exceed the course capacity'. The rule depends on other streams' state: `reads` is PLAY0271 and `require` over a view is PLAY0268 at binding (Screenplay#129/#209). The enrolment-to-course fan-in cannot be protected as modeled (see the CourseAvailability slice): concurrent enrolments can overbook. Target enforcement is an open decision (consistency-and-concurrency.md section 3); the model stays as stated intent, recorded in STATE.md."
167
+ description "Atomic here: one active enrolment per member and course (composite unique constraint, released by withdrawal), and one MemberEnrolled per enrolment stream, so a retry with the same enrolment id after a lost reply cannot enrol twice (the composite constraint alone lets a source re-claim its own value). NOT enforced in the model today: 'enrolments never exceed the course capacity'. The rule depends on other streams' state: `reads` is PLAY0271 and `require` over a view is PLAY0268 at binding (Screenplay#129). The enrolment-to-course fan-in cannot be protected as modeled (see the CourseAvailability slice): concurrent enrolments can overbook. Target enforcement is an open decision (consistency-and-concurrency.md section 3); the model stays as stated intent, recorded in STATE.md."
168
168
  command EnrolMember
169
169
  enrolmentId EnrolmentId identifier
170
170
  courseId CourseId
@@ -5,5 +5,5 @@ Third-party notices
5
5
 
6
6
  This skill adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
7
7
  (https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
8
- https://nebulit.de), used with the agreement of Martin Dilger and Nebulit GmbH. That repository
9
- carries no licence file; the adapted material remains credited to Martin Dilger and Nebulit GmbH.
8
+ https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
9
+ material remains credited to Martin Dilger and Nebulit GmbH.
@@ -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.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
25
+ The standalone pin is Screenplay 4.139.0.
26
+ CLI and bundled package pins: `references/versions.md`. 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.50.0
34
- or Screenplay 4.135.0.
33
+ recorded in that vector. These retained results are not a rerun on CLI 3.53.1
34
+ or Screenplay 4.139.0.
35
35
 
36
36
  ## Ground rules
37
37
 
@@ -43,7 +43,8 @@ or Screenplay 4.135.0.
43
43
  PLAY0029 (a misspelt keyword or a `type` inside a slice) drops a construct silently.
44
44
  3. **Pick the compiler deliberately and name it.** Standalone `screenplay` for
45
45
  current language checks and reference specifications; `cratis` for rendering
46
- and generation. Bundled and standalone versions differ. Report both tool and
46
+ and generation. Bundled and standalone versions differ (CLI 3.53.1 bundles 4.137.0;
47
+ the standalone pin is 4.139.0). Report both tool and
47
48
  version, rather than transferring a verdict across releases.
48
49
  4. **Know the mode** (design, executable, renderable) and write from its subset.
49
50
  5. **Capability is not correctness.** The tool you ran decides what is accepted today; the
@@ -64,10 +65,10 @@ or Screenplay 4.135.0.
64
65
  | | Standalone `screenplay` | `cratis screenplay ...` |
65
66
  | --- | --- | --- |
66
67
  | Check root | `screenplay <root> --warnaserror --no-color` | `cratis screenplay validate <root> --warnings-as-errors -o json-compact` |
67
- | Scope/checks | `--scope <address>`, `--check <names>`; a scoped pass is not whole-application success | Discover installed validation options |
68
+ | Scope/checks | `--scope <address>`, `--check <names>`; a scoped pass is not whole-application success | `validate --executable` (bundled binder, no write), `--check <names>`, `--scope`; `render --scope`/`--check`; `cratis screenplay conform` |
68
69
  | Reference execution | `screenplay test <root>` or MCP `run-specifications` | Discover bundled MCP capability; target tests are not V4 |
69
70
  | 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.50.0 passes through ESM v10 to Stage construct admission; newer versions: `CLI-RENDER-004` |
71
+ | Render version boundary | Binder admission is not Stage admission | Pinned CLI (`versions.md`) passes through ESM v10 to Stage construct admission; bound newer models: `CLI-RENDER-004` |
71
72
 
72
73
  Read `references/versions.md` when you need the exact messages, exit codes or the MCP roots bug.
73
74
 
@@ -85,12 +86,12 @@ Independent results, not a ladder. Read `references/verdicts.md` for the command
85
86
  | V4 | reference specifications run | `screenplay test` or MCP `run-specifications`; unsupported/unbound is not a pass; rendered Debug tests are V5.tests, never V4 |
86
87
  | V5 | rendered and target-verified | `cratis render`, then Debug build and tests; report admission, publication, build and tests separately |
87
88
 
88
- V2 and V3 need MCP: send `initialize`, then `notifications/initialized`, and start the
89
+ V2 and V3 need MCP (V3 alone can also be read from `cratis screenplay validate --executable <root>`, labeled as the bundled compiler): send `initialize`, then `notifications/initialized`, and start the
89
90
  server with a fixed root when the tool is older than 4.63.2 (the roots bug hit 4.63.1 and the
90
91
  4.60.1 bundled by cratis before 3.28.2; 4.66.0 and later and cratis 3.28.2 are fine). A subagent without MCP reports "V2 not run: no MCP in this agent".
91
92
 
92
- One line per verdict, tool first, for example `V1 pass (screenplay 4.68.0, 3 files)` and
93
- `V3 blocked: PLAY0268 x3 (list query, pii)`. Name the source identity (commit plus the digest from
93
+ One line per verdict, tool first, for example `V1 pass (screenplay 4.139.0, 3 files)` and
94
+ `V3 blocked: PLAY0268 x3 (filter query, pii)`. Name the source identity (commit plus the digest from
94
95
  the source-identity helper (`cratis-screenplay-modeling-lifecycle` `references/verdicts-and-modes.md` "Source identity")) the verdict ran on; keep it apart from the MCP
95
96
  `modelRevision`, which is semantic and, without `.screenplay/identities.json`,
96
97
  changes with the root folder name.
@@ -99,17 +100,18 @@ changes with the root folder name.
99
100
 
100
101
  - **Design**: every construct family parses; use it to model first. Compiled shapes:
101
102
  `references/cheat-sheet.md`. Read [references/cheat-sheet-example.md](references/cheat-sheet-example.md) when you need one complete design-mode document with every construct family.
102
- - **Executable** (binds, V3): `references/executable-subset.md`. Keyed optional queries
103
- only; no handler (PLAY0268, with or without `implementation`/`hint`); `reads` and
103
+ - **Executable** (binds, V3): `references/executable-subset.md`. Optional keyed lookups, unfiltered
104
+ lists and lists narrowed by one `by` key (observable too); `filter`, `scoped to`, `performer` and composite `by` do not bind; no handler (PLAY0268, with or without `implementation`/`hint`); `reads` and
104
105
  `concurrency` do not bind (PLAY0271); no compliance markers (`pii`/`secret`); v6 constructs bind on Screenplay 4.61 or
105
106
  later (standalone, and cratis 3.28.2 or later); generated values and `returns` responses bind (ESM v7)
106
107
  from Screenplay 4.68.0 (also in the current CLI bundle) (`references/generated-responses-example.md`). Read [references/executable-example.md](references/executable-example.md) when you need a small StateChange and StateView model that binds executable, [references/pdl-example.md](references/pdl-example.md) when writing projection forms that bind and run, and [references/automation-translate-example.md](references/automation-translate-example.md) when writing Automation and Translate slices (ESM v6).
107
- - **Renderable** (V5): `references/renderable-subset.md` retains explicitly labeled
108
- older Stage probes. Current CLI admits v7 to planning, but its v7 corpus gets
109
- Stage generated-value/response refusals `STAGE-ESM-028`/`029`, not a blanket
110
- compiler refusal. Run admission before claiming a particular model renders.
108
+ - **Renderable** (V5): `references/renderable-subset.md` has the current Stage 4.73.1 table and
109
+ explicitly labeled older probes. The CLI admits through v10 to Stage construct checks; generated
110
+ values and responses get `STAGE-ESM-028`/`029`, not a blanket compiler refusal. Run admission
111
+ before claiming a particular model renders (`cratis render --scope` for an admitted part, `--check`
112
+ for no-write planning).
111
113
  - **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
114
+ The pinned CLI/Stage pair (`references/versions.md`) reaches admission through v10, not blanket
113
115
  rendering. Operations and exact numeric source mode remain unadmitted.
114
116
  Details: `references/sources-and-streams.md` and `references/versions.md`.
115
117
  - **Released v9/v10 and published v11:** public contracts and direction select v9;
@@ -119,6 +121,15 @@ changes with the root folder name.
119
121
  `key` binds. Read `references/production-routes-and-filters.md` and read-surface
120
122
  `references/named-keys.md`; version freeze and numeric boundaries: `references/versions.md`.
121
123
 
124
+ - **Published v12 (4.139.0):** non-positional enum numbers bind; canonical
125
+ `numbers` parallels `values`. Positional pins preserve earlier executable
126
+ bytes/version. Specifications still use names. The pinned CLI's compiler accepts source
127
+ authoring but refuses non-positional numbers at binding (PLAY0268), before
128
+ renderer admission. Neither its compiler nor Stage reads v12 ESM; upgrading
129
+ only the compiler would not lift their v10 admission ceiling (`references/versions.md`). Syntax:
130
+ command-surface `references/enum-numbers.md`; errors PLAY0667–0670 and opt-in
131
+ `enum-pinning` hint PLAY0671: `references/diagnostics.md`.
132
+
122
133
  - **Caller/compliance metadata** at 4.127.0: `$identity` aliases caller built-ins;
123
134
  additional identity details are metadata and executable reads still refuse.
124
135
  Bare `pii`/`secret` replace legacy spellings; `pii personal` repeats one marker
@@ -174,7 +185,7 @@ Read [references/diagnostics.md](references/diagnostics.md) when a PLAY, STAGE o
174
185
  11. Declare an event once, in its producing slice.
175
186
  12. Quoted `import "glob"` is your own files; unquoted `import Ctx.Event` is a foreign
176
187
  contract and does not bind.
177
- 13. A handler never binds; `numbers exact` never binds; descriptions are never rendered.
188
+ 13. A handler never binds; `numbers exact` never binds; descriptions render only as XML doc comments, never as behavior.
178
189
 
179
190
  ## Gate
180
191
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  One complete document with every construct family. Design mode, not executable. Prose rules: [cheat-sheet.md](cheat-sheet.md); tool versions: [versions.md](versions.md); what binds: [executable-subset.md](executable-subset.md).
4
4
 
5
- Binding blockers: unquoted import, `pii`, `reads` (PLAY0271), `starts with`, observable/list/filter query. Executable shapes are in the sibling examples. The bare-marker fence compiles warning-free on standalone 4.127.0; the earlier legacy-marker version compiled on 4.66.0 and CLI 3.28.2. `RecordingAPayment` lists the `InvoiceClosed` cascade, which the cratis 3.27.1 bundle (4.60.1) rejected with a false PLAY0285 ("outcome cannot be produced by 'RecordPayment'"); 3.28.2 accepts it.
5
+ Binding blockers: unquoted import, `pii`, `reads` (PLAY0271), `starts with`, a `filter` query (lists and observable lists bind). Executable shapes are in the sibling examples. The bare-marker fence compiles warning-free on standalone 4.127.0; the earlier legacy-marker version compiled on 4.66.0 and CLI 3.28.2. `RecordingAPayment` lists the `InvoiceClosed` cascade, which the cratis 3.27.1 bundle (4.60.1) rejected with a false PLAY0285 ("outcome cannot be produced by 'RecordPayment'"); 3.28.2 accepts it.
6
6
 
7
7
  ```screenplay test=unbound
8
8
  // Design-mode cheat-sheet: every construct family; compiles warning-free on the standalone tool.
@@ -153,9 +153,9 @@ module Billing
153
153
  readmodel InvoiceRow
154
154
  invoiceId InvoiceId
155
155
  number String
156
- query InvoiceById => InvoiceRow optional // keyed: the only executable query shape
156
+ query InvoiceById => InvoiceRow optional // keyed optional lookup (unfiltered lists bind too)
157
157
  by invoiceId InvoiceId
158
- query ListInvoices => observable InvoiceRow[] // design mode only (PLAY0268 at binding)
158
+ query ListInvoices => observable InvoiceRow[] // design mode only: the `filter` below is PLAY0268 at binding
159
159
  filter number String optional
160
160
  projection InvoiceList => InvoiceRow
161
161
  from InvoiceRegistered
@@ -21,10 +21,13 @@ PLAY0268 (#599), not v10. Read [named keys](../../cratis-screenplay-read-surface
21
21
  Production `stream Source.Stream` overrides and reaction/reducer `from Source[.Stream]`
22
22
  select released v10: [routes and filters](production-routes-and-filters.md).
23
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.
24
+ `numbers exact` does not bind. Non-positional enum member numbers (`draft = 1`)
25
+ select published v12 at 4.139.0; positional pins keep earlier bytes/version,
26
+ while specifications still use names. The pinned CLI/Stage pair (`versions.md`) does not admit v12.
27
+ Syntax/example: command-surface `references/enum-numbers.md`.
28
+ See `versions.md` for freeze and numeric boundaries.
25
29
 
26
- Current pins: standalone Screenplay 4.135.0 / CLI 3.50.0; `versions.md` is the
27
- single table. Compile evidence below keeps its historical tool labels.
30
+ Current pins: `versions.md` (the single table). Compile evidence below keeps its historical tool labels.
28
31
 
29
32
  The syntax lives in compiled example files next to this one (each is a Markdown file holding
30
33
  one complete `screenplay` fence). Copy shapes from them; do not write a form that none of
@@ -84,7 +87,7 @@ remain unadmitted. Compile and test each relevant fixture with the chosen tool.
84
87
  generated identifier` (PLAY0484); legacy `?` is PLAY0479 (information).
85
88
  - Ownership policies: `require claim "ownerId" matches subject` (subject = command identifier
86
89
  or keyed query argument) or `matches <commandProperty>`; executable; renderable only for
87
- text-backed targets (Uuid-backed: STAGE-ESM-015).
90
+ text-backed targets at the 4.24-era Stage; Stage 4.73.1 also renders Uuid and Date claim targets (see `renderable-subset.md`; unsupported subjects: STAGE-ESM-015).
88
91
 
89
92
  ## Exact numeric source mode
90
93
 
@@ -5,6 +5,7 @@
5
5
  - Warnings that hide defects (always validate with `--warnings-as-errors`)
6
6
  - Source reference and identifier checks
7
7
  - Public events and translation direction
8
+ - Explicit enum member numbers
8
9
  - Named keys, production routes and observer filters
9
10
  - Caller identity, compliance and routes
10
11
  - Specification metadata, callers, cases and locators
@@ -53,7 +54,7 @@ Legacy compliance spellings (`@pii`/`@sensitive`) do not evade PLAY0515.
53
54
 
54
55
  ## Public events and translation direction
55
56
 
56
- Current at Screenplay 4.135.0; all are errors. These constructs bind as released
57
+ Source checked at Screenplay 4.135.0; all are errors. These constructs bind as released
57
58
  ESM v9, except public/foreign imports without local shapes (PLAY0268).
58
59
 
59
60
  | Code | Meaning / fix |
@@ -79,6 +80,24 @@ or non-Translate direction. Repair discovery uses `repair-capabilities`, workspa
79
80
  `repairs`, then revision-checked `propose-repair`; do not guess a direction.
80
81
  See automations-and-translations `references/public-events-and-direction.md`.
81
82
 
83
+ ## Explicit enum member numbers
84
+
85
+ Source errors from Screenplay 4.137.0; ESM v12 admission from 4.139.0:
86
+
87
+ | Code | Severity | Meaning / fix |
88
+ | --- | --- | --- |
89
+ | PLAY0667 | E | Mixed numbered/unnumbered members; number all or none |
90
+ | PLAY0668 | E | Duplicate enum number; aliases are not supported |
91
+ | PLAY0669 | E | Number outside int32 (-2147483648 through 2147483647) |
92
+ | PLAY0670 | E | Malformed number: decimal digits, optional minus, no leading zero, fraction, exponent or plus |
93
+ | PLAY0671 | I | Opt-in `enum-pinning` completeness hint for an unnumbered enum used by an event property; ordinary compilation does not report it |
94
+
95
+ Numbering errors have no automatic repair. PLAY0671 suggests the opt-in
96
+ `propose-number-enum-members` refactoring, not a correctness repair. Member names
97
+ remain specification values. Non-positional pins select v12; positional pins keep
98
+ older executable bytes/version. Consumer admission is separate (`versions.md`).
99
+ Source: `v4.139.0:Documentation/screenplay/diagnostics.md`, decision 0065.
100
+
82
101
  ## Named keys, production routes and observer filters
83
102
 
84
103
  | Code | Severity | Meaning / fix |
@@ -312,7 +331,7 @@ Report each as `code file:line one-line meaning`; never paste more than about 30
312
331
 
313
332
  ## Render admission (V5): `STAGE-*`, `CLI-RENDER-*`, `STAGE-CRATIS-*`
314
333
  Full table with causes: `renderable-subset.md`. The Stage 4.24.x rows below
315
- retain historical source/probe evidence. Current CLI 3.50.0/Stage 4.67.0 admits
334
+ retain historical source/probe evidence. The pinned CLI/Stage pair (`versions.md`) admits
316
335
  through v10 to construct checks; above it is CLI-RENDER-004 (direct Stage:
317
336
  STAGE-ESM-016). Publication STAGE-ESM-032, foreign facts/event captures 033,
318
337
  reaction identity 034, reaction filters 035 and production overrides 036 remain
@@ -1,6 +1,6 @@
1
1
  # Documentation contradictions and which side to trust
2
2
 
3
- Current pins are Screenplay 4.135.0 / CLI 3.50.0 (`versions.md`). This is a
3
+ Current pins: `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
6
  sources/routes bind as ESM v8; PLAY0515 is a source error; CLI admits through
@@ -42,7 +42,7 @@ read from source or documentation.
42
42
  | 14 | `$causedBy` | not evaluable (#4119), not ESM | showcase only |
43
43
  | 15 | literal keys | `key literal "global"` vs `key "global"` | both compile; prefer `literal` |
44
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] |
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`) |
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 historically probed 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`) |
46
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` |
47
47
  | 19 | `$strings` constraint messages | `D/constraints.md:31` vs `D/internationalization.md:55` | the compiler keeps the key; realization localizes |
48
48
  | 20 | composite key braces | optional in the EBNF; both forms in docs | both fine |
@@ -55,8 +55,10 @@ read from source or documentation.
55
55
  | 27 | decision index | `decisions/README.md` row 0020 shows stage `none` while v5 is implemented | the code: v5 `then no readmodel` binds |
56
56
  | 28 | `visualize-model` kind | the tool filters on the kind "Reactor" (`McpVisualization.cs:21`) although the construct is a Reaction; its added/removed summary never counts reactions (Screenplay#379, open) | the model, not the summary |
57
57
  | 29 | bodied reducers in Stage | cli `Documentation/reference/screenplay.md:38` says bodied reducers are unsupported (STAGE-ESM-019) | Stage 4.24 code admits pure allowlisted reducer bodies (`PureTransitionAdmission.cs`); trust the code |
58
- | 30 | `cratis screenplay validate <file>` | the command reads as a document validator | file mode ignores the file's imports and reports false unknown-name warnings (cli#244, open): validate the folder [probed] |
58
+ | 30 | `cratis screenplay validate <file>` | the command reads as a document validator | file mode ignored the file's imports and reported false unknown-name warnings on CLI 3.28.2 (cli#244, closed by PR #258: later releases compile the file with its imports); validate the folder anyway [probed on 3.28.2] |
59
59
  | 31 | cli false PLAY0285 | `D/diagnostics.md:640` defines PLAY0285 as a contradiction against every possible producer | cratis before 3.28.2 reported it falsely on reaction cascades (cli#242); not reproduced on cratis 3.28.2 [probed] |
60
+ | 32 | competing-claim specification | `D/constraints.md` says a specification "cannot yet show a collision between two event sources" | `D/specifications.md`: `for` on `given` events establishes a claim on one source and attempts the same value on another; the specification page and the tool decide (checked at v4.139.0) |
61
+ | 33 | descriptions in rendered code | Stage `Documentation/reference/render-plans.md` says the cratis CLI does not yet call `WithAuthoringMetadata` | the CLI calls it since 3.51.0 (`CratisRenderTarget.cs`): descriptions and documentation render as XML doc comments; `CLI-RENDER-006` when skipped (checked at cli v3.53.1) |
60
62
 
61
63
  Rows 0 to 12, 14 to 21 and 23 were re-read at the v4.66.0 line numbers above; rows 14, 15,
62
64
  19, 20 and 23 are properties of the language rather than documentation defects and were