@cratis/pi 7.29.0 → 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
@@ -12,9 +12,13 @@ guarantees. Then write it as `Automation` and `Translate` slices that say truthf
12
12
  protected, what is only recorded, and who acts. Grammar depth is in
13
13
  `cratis-screenplay-captures-and-reactions`; this skill owns the decisions.
14
14
 
15
- **One meaning of Translation:** outside data becomes our facts (a `capture` or a translator
16
- reaction over an imported event, in a `Translate` slice). Our own event-to-event follow-up is an
15
+ **Translation crosses an application boundary:** inbound turns outside data or foreign
16
+ public events into private local facts; outbound publishes private facts as one local public
17
+ event type. Declare `direction inbound|outbound` when public metadata is used; omission
18
+ preserves historical inbound for legacy translations. Private-to-private follow-up is an
17
19
  Automation (`produces` or `invokes`), even when a Chronicle reactor realizes it.
20
+ Read [public events and direction](references/public-events-and-direction.md) for released
21
+ ESM v9 forms, event-target folds, publication specifications and the Unsupported capture limit.
18
22
 
19
23
  Work in the model first. Code appears only where it is truly needed: the external call, the
20
24
  source adapter, the trusted actor, and everything Stage cannot render (below). Session and
@@ -35,8 +39,9 @@ identity, effect and pending-work contract at that point; do not postpone it to
35
39
  (`references/realization-and-gap-fill.md`).
36
40
  - Reaction `runs as system role "<Role>"` declares an invocation actor (ESM v10).
37
41
  Without it the invoke has no caller. Historical CLI 3.41.0's 4.114.0 compiler
38
- rejected the syntax (PLAY0137); current CLI 3.46.1 instead refuses ESM v10
39
- at render admission (CLI-RENDER-004). Checked model/diagnostics: captures-and-reactions
42
+ rejected the syntax (PLAY0137); previous CLI 3.46.1 refused ESM v10
43
+ at render admission (CLI-RENDER-004). CLI 3.50.0 reaches Stage 4.67.0's
44
+ construct admission, which still refuses reaction identity (STAGE-ESM-034). Checked model/diagnostics: captures-and-reactions
40
45
  `references/invocation-identity.md`.
41
46
 
42
47
  ## Effect guarantees and recovery traps
@@ -11,8 +11,10 @@ technique: partial work stays visible and nothing is skipped because it looked r
11
11
 
12
12
  Result is `complete` only when every column is filled or says why it does not apply (for example
13
13
  "direct effect: immediate, internal, cannot fail"). `open` names the unresolved decision and who
14
- answers. `blocked` names the actual capability gap (for example current CLI
15
- 3.46.1 refuses ESM v10 at render admission with CLI-RENDER-004) with intended behavior.
14
+ answers. `blocked` names the actual capability gap with intended behavior. For example,
15
+ CLI 3.50.0 admits ESM v10 to Stage 4.67.0 construct checks, where reaction identity
16
+ is refused with STAGE-ESM-034. Previous CLI 3.46.1 refused v10 at the version gate
17
+ with CLI-RENDER-004; do not report that historical refusal as the current gap.
16
18
 
17
19
  ## Per translation (capture or translator reaction)
18
20
  | Source and type | Location | Correlation | Field dispositions | Target fields traced | Dedup and ordering | Trust boundary | Recovery owner | Named cases | Result |
@@ -72,9 +72,9 @@ Screenplay 4.125.0 declares the actor with reaction-level `runs as system role
72
72
  "<Role>"` (ESM v10); without it a gated invocation has no caller and denies.
73
73
  `given caller` is not an invocation actor. Role requirements remain enforced;
74
74
  claim conditions for this system principal remain unknown. Historical CLI 3.41.0's
75
- older compiler rejected the syntax (PLAY0137). Current CLI 3.46.1 bundles
76
- Screenplay 4.130.0 / Stage 4.52.0 and refuses v10 at render admission
77
- (CLI-RENDER-004; toolchain `references/versions.md`).
75
+ older compiler rejected the syntax (PLAY0137). CLI 3.50.0 bundles Screenplay 4.131.0 / Stage 4.67.0 and reaches v10
76
+ construct admission, but reaction identity still refuses STAGE-ESM-034.
77
+ Previous CLI 3.46.1 refused v10 at its version gate; see toolchain `references/versions.md`.
78
78
  Use the checked model in captures-and-reactions `references/invocation-identity.md`.
79
79
  Arc gap-fill uses `[ExecuteCommandsAsSystem("<role>")]` for returned commands,
80
80
  not identity inferred from prose or an imperative pipeline call.
@@ -44,5 +44,8 @@ binds); tool-qualified verdict text; the trusted-actor text now names `[ExecuteC
44
44
  `reactions.md`, `ReactionIdentityParser.cs`, `ReactionRefusalValidator.cs` and the
45
45
  binder's v10 selection; the checked scenario passed reference execution. CLI
46
46
  3.41.0's older parser and Stage 4.51.3's v7 planner were historical target limits.
47
- Current CLI 3.46.1 bundles Screenplay 4.130.0 / Stage 4.52.0 and still refuses
48
- v10 at render admission (CLI-RENDER-004; toolchain `references/versions.md`).
47
+ Previous CLI 3.46.1 refused v10 at its version gate. CLI 3.50.0 bundles
48
+ Screenplay 4.131.0/Stage 4.67.0, reaches v10 construct checks, and still refuses
49
+ reaction identity with STAGE-ESM-034; see toolchain `references/versions.md`.
50
+ Public/direction forms and routes/filters follow Screenplay v4.135.0 decisions
51
+ 0049–0051 and 0060–0066, not the older inbound-only translation scope.
@@ -0,0 +1,137 @@
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
+ # Public events and translation direction (released ESM v9)
5
+
6
+ ## Contents
7
+
8
+ - Choose the boundary and direction
9
+ - Outbound publication and specifications
10
+ - Inbound event captures
11
+ - Admission and evidence
12
+
13
+ ## Choose the boundary and direction
14
+
15
+ Events are private by default. `public event X` declares a local public contract;
16
+ `event X from "store"` declares a foreign public event's shape locally. The quoted
17
+ origin is an opaque store name, not a path or declaration reference. Nothing checks
18
+ that the local shape matches the other application's contract. A public/foreign
19
+ `import Qualified.X from "store"` has no local shape and remains PLAY0268.
20
+
21
+ `direction inbound` and `direction outbound` belong directly inside a Translate
22
+ slice. Omission preserves historical inbound behavior for translations with no
23
+ public metadata. A translation declaring or using public metadata needs explicit
24
+ direction (PLAY0614), not a guess from its name.
25
+
26
+ - Inbound: accept public foreign events or outside data and produce private local
27
+ facts. Use `capture` or a translating reaction. Correlation, deduplication,
28
+ enrichment and recovery still need the method skill's decisions.
29
+ - Outbound: consume private local facts and publish exactly one local public event
30
+ type through a reaction or event-target projection/reducer. No capture belongs
31
+ here. A private-to-private follow-up is an Automation, not an outbound Translate.
32
+ - A command never produces a public event (PLAY0607), and a foreign public event
33
+ is never produced locally (PLAY0613). Export only the intended contract fields;
34
+ public visibility does not authorize exposing personal data or secrets.
35
+
36
+ ## Outbound publication and specifications
37
+
38
+ `projection P => PublicEvent` resolves its target as an event rather than a read
39
+ model. Keep read-model and event names distinct. The outbound slice owns exactly
40
+ one local public event type; its builders target that event only. Event-target
41
+ reducers have the same boundary but opaque transitions: the reference evaluator
42
+ returns typed Unsupported when a transition is reached, not a successful fold.
43
+
44
+ An event-target projection holds one folded instance per event source id, not a
45
+ read-model key. It publishes when the folded instance is complete and differs from
46
+ the last published instance for that id. An identical repeated private fact emits
47
+ nothing; changed state emits a new public instance, never rewrites the old fact.
48
+ The reference fold admits only root-property set/clear from literals or event
49
+ properties; other mappings block planning. Publication is unrouted and reactions
50
+ can observe the new public fact. A route filter therefore cannot select publication.
51
+
52
+ This complete source uses the released publication specification form:
53
+
54
+ ```screenplay
55
+ domain Contracts
56
+ concept OrderId : Uuid
57
+ concept OrderStatus : String
58
+ module Integration
59
+ feature Translation
60
+ slice StateChange PackOrder
61
+ command PackOrder
62
+ orderId OrderId identifier
63
+ carrier String
64
+ produces OrderPacked
65
+ for orderId
66
+ carrier = carrier
67
+ event OrderPacked
68
+ carrier String
69
+ slice Translate PublishOrderShipped
70
+ direction outbound
71
+ public event OrderShipped
72
+ carrier String
73
+ status OrderStatus
74
+ projection OrderShippedPublisher => OrderShipped
75
+ from OrderPacked
76
+ status = "packed"
77
+ specification PublishingAPackedOrder
78
+ when append OrderPacked
79
+ for "3fa85f64-5717-4562-b3fc-2c963f66afa6"
80
+ carrier = "DHL"
81
+ then OrderShipped
82
+ carrier = "DHL"
83
+ status = "packed"
84
+ ```
85
+
86
+ `when append <PrivateEvent>` commits the input; the `then <PublicEvent>` list
87
+ contains only the follow-up publications, exhaustive and ordered. Also specify
88
+ incomplete state, unchanged repeat, changed state and independent event source ids.
89
+ An expected public instance is not a `then readmodel` assertion.
90
+
91
+ ## Inbound event captures
92
+
93
+ The foreign declaration must carry a quoted origin. `source events` has one or
94
+ more distinct `from <ForeignEvent>` children; no URL, table or other setting is
95
+ allowed in that block. It is valid only in an explicitly inbound Translate slice.
96
+
97
+ ```screenplay
98
+ domain Contracts
99
+ concept OrderId : Uuid
100
+ module Integration
101
+ feature Tracking
102
+ slice Translate TrackShipments
103
+ direction inbound
104
+ event ShipmentDispatched from "shipping"
105
+ orderId OrderId
106
+ event OrderDispatched
107
+ orderId OrderId
108
+ capture ShipmentTracking
109
+ source events
110
+ from ShipmentDispatched
111
+ key orderId
112
+ append OrderDispatched
113
+ orderId = $.orderId
114
+ ```
115
+
116
+ This compiles and binds as ESM v9. Evaluating the events-source capture returns
117
+ typed Unsupported: the event-payload-to-working-record contract is not admitted.
118
+ Do not equate binding with a passing capture specification or invent that mapping.
119
+ Keep correlation and resulting private events in the model and report the runtime gap.
120
+
121
+ ## Admission and evidence
122
+
123
+ ESM v9 shipped in Screenplay 4.117.0 and is selected only by use of public events,
124
+ origins, direction, event-target builders or events-source captures. At 4.135.0,
125
+ publication reference scenarios execute; imported shapes still refuse binding.
126
+ Stage 4.52.0 (previous CLI 3.46.1) audits only through v7: CLI-RENDER-004 precedes
127
+ its STAGE-ESM-016 version refusal. CLI 3.50.0/Stage 4.67.0 reaches construct
128
+ admission through v10 but still refuses publication (STAGE-ESM-032), foreign
129
+ events/events-source captures (STAGE-ESM-033); source admission is not rendering.
130
+
131
+ Source: Screenplay `v4.135.0:Documentation/screenplay/fixtures/public-events.play`,
132
+ `events.md`, `slices.md`, `captures.md`, decisions 0049–0051 and
133
+ `Source/DotNET/Screenplay.CanonicalCorpus/PublicEventsCorpus.cs`.
134
+ Renderer source: Stage `v4.52.0:Source/Rendering.Cratis/Semantics/SemanticCratisAdmission.cs`
135
+ and `v4.67.0:Source/Rendering.Cratis/Semantics/SemanticVersionFeatures.cs`.
136
+ Diagnostics and repairs: toolchain `references/diagnostics.md`; version allocation:
137
+ toolchain `references/versions.md`.
@@ -3,12 +3,16 @@
3
3
  "input": "Our payment provider sends webhooks when invoices are paid or refunded, and we must email a receipt afterwards. Model the integration and the follow-up in the Screenplay model.",
4
4
  "fixtures": [],
5
5
  "assertions": [
6
+ { "kind": "skill-contains", "value": "direction outbound", "file": "references/public-events-and-direction.md" },
7
+ { "kind": "skill-contains", "value": "source events", "file": "references/public-events-and-direction.md" },
8
+ { "kind": "skill-contains", "value": "then OrderShipped", "file": "references/public-events-and-direction.md" },
9
+ { "kind": "skill-contains", "value": "typed Unsupported", "file": "references/public-events-and-direction.md" },
6
10
  { "kind": "play-compiles" },
7
11
  { "kind": "skill-contains", "value": "`[ExecuteCommandsAsSystem(\"<role>\")]`" },
8
12
  { "kind": "skill-contains", "value": "ESM v10" },
9
13
  { "kind": "skill-contains", "value": "STAGE-ESM-024" },
10
14
  { "kind": "skill-contains", "value": "runs as system role" },
11
- { "kind": "skill-contains", "value": "**One meaning of Translation:**" },
15
+ { "kind": "skill-contains", "value": "**Translation crosses an application boundary:**" },
12
16
  { "kind": "skill-contains", "value": "complete, open or blocked" },
13
17
  { "kind": "skill-contains", "value": "never write a mapping" },
14
18
  { "kind": "skill-contains", "value": "run-specifications" },
@@ -6,9 +6,8 @@ license: MIT
6
6
 
7
7
  # Captures and reactions
8
8
 
9
- The two slice types that run without anyone pressing a button. A `capture` in a
10
- `Translate` slice turns outside data into events; a `reaction` in an `Automation`
11
- slice runs when something happens.
9
+ `capture` accepts outside data; `reaction` responds to an occurrence.
10
+ Translate slices cross public boundaries; Automation slices cause private follow-up.
12
11
 
13
12
  ## Locate the model
14
13
 
@@ -26,16 +25,9 @@ source is the single flow model.
26
25
 
27
26
  ## Verified product sources
28
27
 
29
- | Package | Version | Purpose |
30
- | --- | --- | --- |
31
- | `Cratis.Screenplay` | `4.31.0` | CDL parser, reaction and trigger parsers, diagnostics, semantic binder |
32
- | `Cratis.Screenplay` | main `fd18129` | Command-only inline event boundary |
33
- | `Cratis.Screenplay` | `4.66.0` (`c89198b`) | ESM v6: reactions, clock, trigger and capture specifications bind; `invokes` caller rule; probed with the standalone tool and its MCP server |
34
-
35
- The table records historical examples/probes; they are not reclassified as
36
- current execution evidence. Refusal/redelivery guidance follows released
37
- v4.125.0 `reactions.md`/`specifications.md`. Current pins are in toolchain
38
- `references/versions.md`; reverify before promoting an old probe to that version.
28
+ Read [product sources](references/product-sources.md) for retained historical
29
+ parser/binder probes and refusal/redelivery evidence. Current pins are in toolchain
30
+ `references/versions.md`; historical examples are not current execution evidence.
39
31
 
40
32
  ⚠️ **Which tool admits them depends on its Screenplay version.** The ESM level
41
33
  decides, not the slice type:
@@ -57,6 +49,13 @@ them. Read `cratis-screenplay-toolchain` (`references/versions.md`) when selecti
57
49
  Method (the four-part automation test, loops, translations versus automations):
58
50
  `cratis-screenplay-automations-and-translations`.
59
51
 
52
+ ## Public boundaries and observer selection
53
+
54
+ Read [ESM v9 translation](../cratis-screenplay-automations-and-translations/references/public-events-and-direction.md)
55
+ for `direction`, `source events`/`from`, and its typed Unsupported evaluation.
56
+ Read [v10 filters](../cratis-screenplay-toolchain/references/production-routes-and-filters.md)
57
+ for reaction/reducer `from Source[.Stream]`; unrouted facts never match.
58
+
60
59
  ## Specify what sets them off
61
60
 
62
61
  A specification names what sets the automation off: `when clock`, `when trigger`
@@ -76,9 +75,9 @@ Read [invocation identity](references/invocation-identity.md) for the checked
76
75
  scenario, claim/unknown semantics and PLAY0647–0652/0557 diagnostics.
77
76
 
78
77
  Historical CLI 3.41.0's 4.114.0 compiler rejected this source with PLAY0137.
79
- Current CLI 3.46.1 bundles Screenplay 4.130.0 / Stage 4.52.0; its render version
80
- gate still admits only through v7 (CLI-RENDER-004 for v10). Target realization is gap-fill,
81
- using Arc `[ExecuteCommandsAsSystem]` for returned commands. Without that attribute
78
+ Previous CLI 3.46.1 refused v10 (CLI-RENDER-004); CLI 3.50.0 reaches
79
+ Stage 4.67.0's construct admission, still refusing identity (STAGE-ESM-034).
80
+ Target realization is gap-fill, using Arc `[ExecuteCommandsAsSystem]` for returned commands. Without that attribute
82
81
  Arc supplies no principal and `[Authorize]`/`[Roles]` deny. Each invoked command
83
82
  is atomic, not the whole cascade; earlier accepted facts remain after a later refusal.
84
83
 
@@ -71,10 +71,10 @@ module Work
71
71
 
72
72
  Historical CLI 3.41.0 bundled Screenplay 4.114.0, which did not parse `runs as`:
73
73
  the example's `cratis screenplay validate --executable --warnings-as-errors`
74
- returned PLAY0137, exit 5. This is not a current parser claim. Current CLI 3.46.1
75
- bundles Screenplay 4.130.0 but its render gate still admits only through v7
76
- (CLI-RENDER-004 for v10); bundled Stage 4.52.0's direct planner audits through
77
- v7 and refuses v10 with STAGE-ESM-016 (`references/versions.md` in toolchain).
74
+ returned PLAY0137, exit 5. This is not a current parser claim. CLI 3.50.0 bundles
75
+ Screenplay 4.131.0/Stage 4.67.0 and reaches v10 construct admission, but
76
+ reaction identity still refuses STAGE-ESM-034. Previous CLI 3.46.1/Stage 4.52.0
77
+ audited through v7 only (`references/versions.md` in toolchain).
78
78
  Clock/application-trigger identities have no Stage Arc realization either.
79
79
  Use authorized gap-fill with the model as contract; returned-command Arc identity
80
80
  uses `[ExecuteCommandsAsSystem]`, never permission inferred from a model header.
@@ -0,0 +1,15 @@
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
+ # Retained product-source evidence
5
+
6
+ | Package | Version | Purpose |
7
+ | --- | --- | --- |
8
+ | `Cratis.Screenplay` | `4.31.0` | CDL parser, reaction and trigger parsers, diagnostics, semantic binder |
9
+ | `Cratis.Screenplay` | main `fd18129` | Command-only inline event boundary |
10
+ | `Cratis.Screenplay` | `4.66.0` (`c89198b`) | ESM v6: reactions, clock, trigger and capture specifications bind; `invokes` caller rule; probed with the standalone tool and its MCP server |
11
+
12
+ The table records historical examples/probes, not current execution evidence.
13
+ Refusal/redelivery guidance follows released v4.125.0 `reactions.md`/`specifications.md`.
14
+ Current pins live in toolchain `references/versions.md`; reverify before promoting
15
+ an old probe to that version.
@@ -3,10 +3,12 @@
3
3
  "input": "Translate external data into events and declare a reaction.",
4
4
  "fixtures": [],
5
5
  "assertions": [
6
+ { "kind": "skill-contains", "value": "unrouted facts never match" },
7
+ { "kind": "skill-contains", "value": "source events" },
6
8
  { "kind": "play-compiles" },
7
9
  {
8
10
  "kind": "skill-contains",
9
- "value": "main `fd18129`"
11
+ "value": "main `fd18129`", "file": "references/product-sources.md"
10
12
  },
11
13
  {
12
14
  "kind": "skill-contains",
@@ -260,14 +260,13 @@ produces when isProForma == true
260
260
 
261
261
  ## Routes and external operations
262
262
 
263
- Named event sources/streams and command routes bind as ESM v8 (verified at 4.125.0);
264
- CLI 3.46.1 render rejects models above v7. A routed command's identifier and
265
- known event destinations must match the source's nominal identifier type
266
- (PLAY0504, error). Allocation uses the generated identifier's type, or without
267
- one requires a UUID-based source. Composite `streamId` routes map every named
268
- part exactly once; scalar `streamId T` and `streamId = x` remain valid. The complete checked route example
269
- and nested `streamId =` form are in `cratis-screenplay-toolchain`
270
- `references/sources-and-streams.md`.
263
+ Routes bind as ESM v8; production `stream Source.Stream` overrides
264
+ select v10. Read toolchain [routes](../cratis-screenplay-toolchain/references/production-routes-and-filters.md)
265
+ and [source/stream declarations](../cratis-screenplay-toolchain/references/sources-and-streams.md).
266
+ `public event X` is a local export; `event X from "store"` is a locally declared,
267
+ unverified foreign shape. Commands never produce public events. Read
268
+ [translation direction](../cratis-screenplay-automations-and-translations/references/public-events-and-direction.md)
269
+ for the released ESM v9 boundary and quoted opaque origins.
271
270
 
272
271
  Use `system`, `uses` and inline/standalone `operation` declarations to state
273
272
  external work in the authored production sequence, with execute/compensate phase
@@ -369,7 +368,7 @@ Four contexts, and **what each omits is load-bearing** — when writing a code b
369
368
  ## Verify
370
369
 
371
370
  - [ ] Validate the complete model root with warnings as errors; name the tool,
372
- version and result. Current pins: standalone 4.131.0 / CLI 3.46.1; bundle
371
+ version and result. Current pins: standalone 4.135.0 / CLI 3.50.0; bundle
373
372
  compatibility and execution are separate checks.
374
373
  - [ ] No unintended `PLAY0478` or `PLAY0479` information remains.
375
374
  - [ ] At most one command property carries `identifier`, and no event property does.
@@ -105,7 +105,7 @@ Checked at Screenplay 4.127.0: `$identity.<property>` is the same caller value a
105
105
  is supported, not deprecated. Historical `cratis` CLI 3.41.0 bundled Screenplay 4.114.0, which predated both:
106
106
  its parser rejected a top-level `identity` block (`PLAY0001`), and with `--executable` it read a
107
107
  `$identity.<property>` mapping as a raw expression (`PLAY0268`). Those checks used standalone 4.127.0;
108
- they are not current CLI 3.46.1/Screenplay 4.130.0 parser claims. Check current renderer
108
+ they are not current CLI 3.50.0/Screenplay 4.131.0 parser claims. Check current renderer
109
109
  admission separately before choosing caller mappings. Built-ins are `id`, `name`, `userName`,
110
110
  `isAuthenticated`, `roles`, `claims.<name>` (everything after `claims.` is opaque).
111
111
  Bare `$identity` reports PLAY0152; unknown properties report PLAY0155. Only
@@ -1,8 +1,8 @@
1
1
  ## Generated values and responses (ESM v7)
2
2
 
3
3
  A `generated` command property and `returns` response bind and reference-execute
4
- as ESM v7 (checked at 4.68.0). Current pins are standalone Screenplay 4.131.0
5
- and CLI 3.46.1 (bundled Screenplay 4.130.0/Stage 4.52.0); `cratis-screenplay-toolchain`
4
+ as ESM v7 (checked at 4.68.0). Current pins are standalone Screenplay 4.135.0
5
+ and CLI 3.50.0 (bundled Screenplay 4.131.0/Stage 4.67.0); `cratis-screenplay-toolchain`
6
6
  `references/versions.md` owns the table. CLI#261 is closed: CLI now admits v7
7
7
  to Stage planning. The historical CLI 3.41.0 v7 canonical corpus received Stage
8
8
  generated-value and response refusals STAGE-ESM-028/029. Do not turn this into a blanket compiler
@@ -45,8 +45,8 @@ Rules (all read at `v4.68.0`):
45
45
 
46
46
  Operations remain authorable/unadmitted (PLAY0268). Named event sources,
47
47
  streams and command/specification routes instead bind and reference-execute as
48
- ESM v8 at 4.125.0; CLI 3.46.1 render refuses versions above v7 before planning
49
- (CLI-RENDER-004). Syntax/MCP acceptance alone is not execution. Source/stream
48
+ ESM v8 at 4.125.0; CLI 3.50.0 reaches Stage construct admission through v10,
49
+ not blanket target support. Syntax/MCP acceptance alone is not execution. Source/stream
50
50
  forms and realization boundary: `cratis-screenplay-toolchain`
51
51
  `references/sources-and-streams.md`. Do not infer further syntax or provider
52
52
  admission from decision numbers.
@@ -139,8 +139,8 @@ What binds depends on **which tool** you ask, so name the tool and its version:
139
139
  standalone 4.125.0. Use `screenplay test` or MCP `run-specifications` for V4.
140
140
  Operations/systems, exact numbers and refusal/redelivery remain unadmitted.
141
141
  Historical CLI 3.41.0 rejected `runs as` syntax and its Stage 4.51.3 check
142
- refused generated values/responses with STAGE-ESM-028/029. Current CLI 3.46.1
143
- bundles Screenplay 4.130.0 / Stage 4.52.0 but still renders through v7 only.
142
+ refused generated values/responses with STAGE-ESM-028/029. CLI 3.50.0 bundles
143
+ Screenplay 4.131.0/Stage 4.67.0; v10 reaches construct admission, not full support.
144
144
  Source/binding admission and target realization are separate gates.
145
145
 
146
146
  The ESM versions, the full disposition table and the Step 7 clock example's binding
@@ -28,7 +28,7 @@ Pins and consumer boundaries: toolchain `references/versions.md`.
28
28
  | Command reads/concurrency | Legacy unprotected decisions, PLAY0271 |
29
29
  | Invokes-only trigger reads | Report-only, not protected state; direct production with reads refuses |
30
30
  | Generated values/responses | v7 binding/reference execution; historical Stage 4.51.3 check: member refusals STAGE-ESM-028/029 |
31
- | Sources/streams and command/specification routes | v8 binding/reference execution; current CLI 3.46.1 render boundary is v7 |
31
+ | Sources/streams and command/specification routes | v8 binding/reference execution; CLI 3.50.0 reaches Stage construct checks through v10 |
32
32
  | Declared reaction invocation actor | v10 binding/reference execution; older CLI parser PLAY0137; Stage planner refuses v10 |
33
33
  | Operations/systems, exact numbers, refusal/redelivery | Source accepted; whole binding refuses PLAY0268 |
34
34
  | UI | Authoring/deferred metadata; runtime support is a separate consumer contract |
@@ -17,9 +17,9 @@ cratis-screenplay-toolchain `references/versions.md`; behaviour from the cratis
17
17
  Screenplay.CritterStack `v0.24.0`. Version-specific capability facts belong in cratis-screenplay-toolchain
18
18
  `references/versions.md`.
19
19
 
20
- Current CLI is 3.46.1, with Screenplay 4.130.0 / Stage 4.52.0 /
20
+ Current CLI is 3.50.0, with Screenplay 4.131.0 / Stage 4.67.0 /
21
21
  Arc.Screenplay 22.54.0 / Chronicle 19.32.0 / Fundamentals 7.22.8
22
- (`references/versions.md` in the toolchain; standalone Screenplay is 4.131.0).
22
+ (`references/versions.md` in the toolchain; standalone Screenplay is 4.135.0).
23
23
  Option/admission evidence checked at CLI 3.41.0: released
24
24
  `GenerateScreenplaySettings.cs`, `ArcScreenplayGeneration.cs`, v7 planning specs
25
25
  and `Documentation/reference/screenplay.md`; older diagnostic probes below keep
@@ -23,7 +23,7 @@ contract is in `cratis-screenplay-ui-composition`.
23
23
 
24
24
  ## Verified product sources
25
25
 
26
- Current authoring/MCP guidance follows Screenplay v4.131.0
26
+ Current authoring/MCP guidance follows Screenplay v4.135.0
27
27
  `Documentation/screenplay/mcp/`, `ast-authoring.md`, `folders.md`, `vscode.md`.
28
28
  Discover installed tools and schemas; CLI bundles can differ from the standalone
29
29
  tool. Pins are in `cratis-screenplay-toolchain` `references/versions.md`.
@@ -291,9 +291,9 @@ that the code compiles or behaves. Read `references/mcp-tools.md#code-attachment
291
291
  it defines them and maps them onto V1 to V5. `screenplay --warnaserror` checks
292
292
  syntax plus the consistency rules (`PLAY0282`-`PLAY0294`) but never binds, so a
293
293
  clean run is not a bound or executable result.
294
- - Operations/exact numbers remain unadmitted; source/stream routes bind as ESM v8,
295
- and generated values/responses as v7. CLI 3.46.1 render passes v7 to Stage but
296
- refuses newer versions. A source contract is never dropped or stubbed to bind.
294
+ - Operations/`numbers exact` remain unadmitted; routes bind as v8, public
295
+ boundaries v9, identity/overrides/filters v10, qualifying non-route Double
296
+ literals v11. CLI 3.50.0 reaches Stage checks through v10. Never drop or stub source contracts to bind.
297
297
  - Distinguish authoring acceptance from `executableReady`; unsupported backend
298
298
  capabilities are not a reason to drop source constructs or invent stubs.
299
299
  - If execution is intended, validate with the owning downstream runtime as well.
@@ -243,6 +243,12 @@ v4.31.0 table, re-read against v4.66.0 and v4.68.0 documentation and probed thro
243
243
  the standalone 4.66.0 tool for the rows marked "probed"; Cratis CLI 3.28.2 and 3.28.3 bundle
244
244
  Screenplay 4.66.0 (before 3.28.2, Screenplay 4.60.1, differ where stated).
245
245
 
246
+ Read-model identity and query admission below are corrected to 4.135.0:
247
+ explicit trailing `key` wins; otherwise single-instance queries in the owning slice
248
+ must agree on `by`. Only with no single-instance identifier and an admitted list
249
+ query does conventional `*Id` inference run. Queryless views need explicit `key`.
250
+ See read-surface `references/named-keys.md` for the collection-key exclusion algorithm.
251
+
246
252
  | Disposition | Constructs |
247
253
  | --- | --- |
248
254
  | Binds and runs in the reference runner | `StateChange`/`StateView` slices; `produces` including `when` conditions over command properties and literal tags; the portable validation rules, `matches email`, quoted `matches` patterns and `require` over command properties; declarative policies and `authorize` on modules, features, commands and keyed queries; `unique` constraints; projections as Chronicle lowers them, including variants, except the projection constructs in the next row; specifications, including `given caller`, `then denied` and `when append` |
@@ -254,7 +260,7 @@ Screenplay 4.66.0 (before 3.28.2, Screenplay 4.60.1, differ where stated).
254
260
  | Binds as ESM v7 on standalone Screenplay 4.68.0 (source and release notes; `PLAY0268` on the 4.66.0 in Cratis CLI 3.28.x, probed) | `generated` properties and `returns` responses, generated fixtures and `then returns`: bound and executed by the reference runner; a policy, rule or requirement that references a generated value is `PLAY0273`, and a generated property on a concept with validation rules is `PLAY0268`. Stage 4.24.2 does not render them (`STAGE-ESM-016`, tracked in Stage#201): gap-fill |
255
261
  | Authorable, not executable (PLAY0268) | Systems/operations, exact numbers and refusal/redelivery remain unadmitted |
256
262
  | Current routing and actor admission | Sources/streams and command/specification routes bind and reference-execute as v8; reaction `runs as system role` supplies the invocation actor as v10 on 4.125.0. Whole-workspace binding determines executable availability; CLI/Stage realization remains separate |
257
- | Blocks binding (`PLAY0268`) | `pii`/`secret` concepts (also legacy spellings; historical probe: "compliance attributes require portable data-subject semantics"), command `handler` (never binds; a command cannot declare both `produces` and `handler`, `PLAY0035`), bare `rule <Name>`, `require` or conditions over read-model paths, dates and `today` in comparisons, `$context.tenant`/claims/roles/causation in `produces`, `$env` conditions, `file` constraints, unquoted `import` of an external contract, a read model whose keyed queries in its own slice do not share one `by` property (none, or two different properties; several queries over the same property bind), any query other than `=> <ReadModel> optional` with one caller-supplied `by` argument (so also observable, filtered, scoped and performer-backed queries), `$causedBy` and templates in projections |
263
+ | Blocks binding (`PLAY0268`) | `pii`/`secret` concepts (also legacy spellings; historical probe: "compliance attributes require portable data-subject semantics"), command `handler` (never binds; a command cannot declare both `produces` and `handler`, `PLAY0035`), bare `rule <Name>`, `require` or conditions over read-model paths, dates and `today` in comparisons, `$context.tenant`/claims/roles/causation in `produces`, `$env` conditions, `file` constraints, unquoted `import` of an external contract, a read model with neither explicit `key` nor unambiguous query-based identity as described above (composite keys remain unadmitted), queries with filters, scope, performer, context-derived `by` or composite `by` blocks (optional keyed and collection queries, including observable delivery, bind at 4.135.0), `$causedBy` and templates in projections |
258
264
  | Blocks binding (`PLAY0271`, legacy meaning) | Command `reads` and `concurrency` |
259
265
  | Deferred (`PLAY0269`, information) | Screens, layouts, templates, forms, contributions, UI profiles, themes, behaviors and `on`/`uses` |
260
266
  | Metadata only (`PLAY0270`, information) | `domain`, `seed`, `persona`, trigger and other descriptions, and `file` provenance on declarations |
@@ -98,6 +98,9 @@ with `view: "diagnostics"`, then `view: "repairs"` at the current revision.
98
98
  | `PLAY0469` | Remove an inline same-source identifier property and mapping, retiring its semantic address. This changes the contract; `canFixAll` is false. Refuse other consumers, opaque impact, changed routing or comment loss. Plain contracts get guidance only. |
99
99
  | `PLAY0479` | Migrate one optional type spelling, or all in a document, preserving syntax and trivia. Exclude `query Q => observable?`. |
100
100
  | `PLAY0563/0564` | Expand a one-line interaction alternative / turn a strict item `where` into one block-form `when`. Individual review, canonical formatting, no pinned evidence; refuse comment loss. Opaque non-item-condition text has no PLAY0564 repair. |
101
+ | `PLAY0614` | Declare Translate direction only when exactly one inbound/outbound interpretation fits public metadata; never change event visibility to make a repair fit. |
102
+ | `PLAY0661` | Complete command reads only when each missing part has one same-named compatible source; preserve authored parts and refuse ambiguity. Queries and trigger reads have no repair. |
103
+ | `PLAY0664` | Remove an override identical to the command's complete source/stream/id route. |
101
104
  | `PLAY0516` | Move a producing sibling declaration/import before its consumer, or pin an already placed file before a retained glob. Preserve catalogs, comments, placement and executable readiness; introduce no timeline findings. Own-sub-feature edges, cycles, unranked members and mixed/different-parent boundaries have no repair. Rediscover after each move; pinned evidence is unsupported. |
102
105
 
103
106
  These discoveries verify acceptance before listing a repair. Only compact
@@ -188,7 +191,8 @@ persona/policy and table/case/caseParameter provenance. Neither view executes.
188
191
 
189
192
  Screenplay v4.127.0 `mcp/reference.md` and `authoring-tools.md` describe these
190
193
  additions (checked at 4.127.0); discover installed schemas because current
191
- CLI 3.46.1 bundles Screenplay 4.130.0, not standalone 4.131.0.
194
+ Previous CLI 3.46.1 bundled Screenplay 4.130.0; CLI 3.50.0 bundles
195
+ 4.131.0, so these source objects are available there too.
192
196
 
193
197
  - Identity/detail summaries expose declared sources; `$identity` has its own
194
198
  expression node. The block alone stays executable-ready, but executable reads
@@ -322,7 +326,8 @@ the open model as candidate:
322
326
  }
323
327
  ```
324
328
 
325
- These source objects require Screenplay 4.131.0; CLI 3.46.1 bundles 4.130.0.
329
+ These source objects require Screenplay 4.131.0; CLI 3.50.0 bundles it
330
+ (previous CLI 3.46.1 bundled 4.130.0).
326
331
  Discover installed schemas rather than assuming bundle parity.
327
332
  Check that the registered worktree is checked out at the intended commit and
328
333
  contains the baseline model; Git refs are not resolved. An admitted missing
@@ -146,10 +146,12 @@ Historical verified public vector and executable checks:
146
146
 
147
147
  - executed toolchain: public CLI 3.43.0 (`23e5a24`), whose default runtime was
148
148
  `cratis/stage:4.52.0` and which bundled Screenplay 4.127.0. Published since,
149
- and not verified by this vector: Scene 4.17.0, Screenplay 4.133.1, Stage 4.64.0, CLI
150
- 3.46.1 (bundling Screenplay 4.130.0, default Stage still 4.52.0) and Studio 0.152.2.
149
+ and not verified by this vector: Scene 4.17.0, Screenplay 4.133.1, Stage 4.64.0,
150
+ previous CLI 3.46.1 (bundling Screenplay 4.130.0, then-default Stage 4.52.0) and
151
+ Studio 0.152.2. Current pins are CLI 3.50.0 (Screenplay 4.131.0 / Stage 4.67.0)
152
+ and standalone Screenplay 4.135.0; see toolchain `references/versions.md`.
151
153
  Compiler claims from this `cratis` probe are 4.127.0 claims, not current CLI
152
- 3.46.1/Screenplay 4.130.0 claims;
154
+ 3.50.0/Screenplay 4.131.0 claims;
153
155
  - fixture root: `Source/DotNET/Screenplay.CanonicalCorpus/Corpus/ScreenComposition/v1/source/folder`
154
156
  in the Screenplay repository;
155
157
  - Screenplay repo tool (available checkout): `dotnet run --project Source/DotNET/Tool
@@ -6,7 +6,7 @@
6
6
  { "kind": "play-compiles" },
7
7
  {
8
8
  "kind": "skill-contains",
9
- "value": "Screenplay v4.131.0"
9
+ "value": "Screenplay v4.135.0"
10
10
  },
11
11
  {
12
12
  "kind": "skill-contains",
@@ -31,7 +31,7 @@ adapted to `.play` declarations (`references/provenance.md`).
31
31
  |---|---|---|
32
32
  | Screenplay | `v4.66.0` (`c89198b`) | MCP catalog (29 tools: `describe-application`, `search-declarations`, `dependencies`, `find-assertion-gaps`, `read-workspace`, `declaration-details`) in `Source/DotNET/Screenplay.Mcp/McpToolCatalog.cs`; diagnostics PLAY0029, PLAY0191, PLAY0268, PLAY0271, PLAY0350, PLAY0381, PLAY0469 in `Source/DotNET/Screenplay/Diagnostics/DiagnosticCodes.cs`; decision 0008 (one data subject per event) |
33
33
  | Screenplay | `v4.127.0` | `find-specification-obligations` (SPEC001–SPEC008 authored presence), `find-modeling-smells` (SMELL001–SMELL005 advisory questions); neither proves executed behavior or complete lineage |
34
- | Screenplay | `v4.131.0` | `semantic-diff` source objects and revision-pinned pages: `Source/DotNET/Screenplay.Mcp/{McpRevisionDiff,McpWorkspaces.Comparison,McpToolCatalog}.cs`, `Documentation/screenplay/mcp/reference.md`; CLI 3.46.1's 4.130.0 bundle predates these arguments |
34
+ | Screenplay | `v4.131.0` | `semantic-diff` source objects and revision-pinned pages: `Source/DotNET/Screenplay.Mcp/{McpRevisionDiff,McpWorkspaces.Comparison,McpToolCatalog}.cs`, `Documentation/screenplay/mcp/reference.md`; previous CLI 3.46.1 predates these; CLI 3.50.0 bundles them |
35
35
  | cratis CLI | `v3.28.3` | bundles Screenplay 4.66.0 and Stage 4.24.2; see the toolchain skill |
36
36
 
37
37
  The full pin table lives in `cratis-screenplay-toolchain` `references/versions.md`; do not copy
@@ -243,18 +243,17 @@ verdict follows the rules in `references/report-template.md`.
243
243
  - Complete examples in this skill compile: `references/worked-example.md`.
244
244
 
245
245
  ## Route near misses
246
- - Writing missing specs: `cratis-screenplay-scenario-coverage`. Slice redesign:
247
- `cratis-screenplay-slice-design`. Stream and invariant fixes:
248
- `cratis-screenplay-streams-and-consistency`. Automations and translations:
249
- `cratis-screenplay-automations-and-translations`.
250
- - Phases, modes and verdicts: `cratis-screenplay-modeling-lifecycle`. Tools, versions and
251
- diagnostics: `cratis-screenplay-toolchain`. Construct mechanics: `cratis-screenplay-specifications`,
246
+ - Specs: `cratis-screenplay-scenario-coverage`; slices: `cratis-screenplay-slice-design`;
247
+ streams/invariants: `cratis-screenplay-streams-and-consistency`;
248
+ reactions/translations: `cratis-screenplay-automations-and-translations`.
249
+ - Modes/verdicts: `cratis-screenplay-modeling-lifecycle`; tools/diagnostics:
250
+ `cratis-screenplay-toolchain`; syntax: `cratis-screenplay-specifications`,
252
251
  `cratis-screenplay-command-surface`, `cratis-screenplay-projections`.
253
- - Chronicle compliance review: `cratis-chronicle-event-modeling`. Rendered code, gap-fill and
254
- code review: `cratis-screenplay-render-and-gap-fill`, `cratis-code-review`,
255
- `cratis-application-slice-conformance`.
252
+ - Compliance: `cratis-chronicle-event-modeling`; rendered/gap-filled code:
253
+ `cratis-screenplay-render-and-gap-fill`, `cratis-code-review`, `cratis-application-slice-conformance`.
256
254
 
257
255
  ## References (load on demand)
256
+ - Review public leaks, direction, complete keys and effective routes with [public/key/route checks](references/public-keys-and-routes.md).
258
257
  - Read `references/checklist.md` when performing the element sweep and phased audit; it contains eleven phases, 89 checks, tiers and evidence sources.
259
258
  - Read `references/anti-patterns.md` when investigating an anti-pattern signal; it gives the signal, why it matters, tier and Screenplay fix.
260
259
  - Read `references/report-template.md` when classifying findings, deciding the verdict, writing the report or conducting a re-review; it defines report, severity and verdict rules.
@@ -263,4 +262,4 @@ verdict follows the rules in `references/report-template.md`.
263
262
  - Read `references/business-questions.md` when conducting the business-question pass; it contains the explainer journey method, prompts and word translation.
264
263
 
265
264
  ## Lineage
266
- Read `references/provenance.md` when checking method lineage, attribution or adaptation permissions.
265
+ Method lineage, attribution and adaptation permissions: `references/provenance.md`.
@@ -62,7 +62,7 @@ the problem, the checks it violates, the fix, all pinned to one declaration.
62
62
  | Missing `for` | an event production (`produces <Event>` or `produces event`) without `for`. Not operation productions: they are authorable design intent, belong to commands, and take no event `for`, tags or routing | runtimes disagree on the destination | C (executable) / D | `for <identifier>` |
63
63
  | Unbuilt read-model field | field no projection maps and AutoMap cannot fill | always empty; not reported by the compiler | D | map it or remove it |
64
64
  | Undeclared removal/append event | `remove with` or capture `append` names an undeclared event | passes V1, fails binding (V2/V3, PLAY0273) | C (executable) / D | declare or fix the name; run V3 |
65
- | Gated command invoked by a reaction without a declared actor | reaction `invokes` a command under a caller policy and has no `runs as system role "<Role>"` that satisfies the gate | the invocation carries no caller: rejected at run time | D (major) | declare `runs as system role "<Role>"` with the least-privilege role the gate admits (ESM v10, Screenplay 4.125.0; current CLI 3.46.1 refuses v10 with CLI-RENDER-004, so gap-fill) or record another trusted-path decision - never just delete the gate. A matching `runs as system role` is the admitted trusted path, not a defect |
65
+ | Gated command invoked by a reaction without a declared actor | reaction `invokes` a command under a caller policy and has no `runs as system role "<Role>"` that satisfies the gate | the invocation carries no caller: rejected at run time | D (major) | declare `runs as system role "<Role>"` with the least-privilege role the gate admits (ESM v10, Screenplay 4.125.0; previous CLI 3.46.1 refused v10 with CLI-RENDER-004, so gap-fill) or record another trusted-path decision - never just delete the gate. A matching `runs as system role` is the admitted trusted path, not a defect |
66
66
  | `reads` + `produces` reaction | reaction both reads a view and produces | fails binding | C (executable) | invoke a command, or produce without reads |
67
67
  | `reads` treated as protection | rule "checked" because the command or reaction `reads` a view | `reads` enforces nothing | D (major) | keep or introduce `reads <View>` + `require ... message` as stated intent, mark it NOT enforced in the slice `description`, name the target (`[ProtectedDecision]` + `DecisionRead<T>`, Chronicle DCB, or a constraint where it fits); checklist E3 |
68
68
  | Caller-supplied state rule | `require currentStatus == "open"` where the caller sends `currentStatus` | the caller decides its own permission | D (major) | read the stored state with `reads`; keep or introduce `reads <View>` + `require ... message` as stated intent, mark it NOT enforced in the slice `description`, name the target (`[ProtectedDecision]` + `DecisionRead<T>`, Chronicle DCB, or a constraint where it fits); checklist E3 |