@cratis/pi 7.21.0 → 7.22.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 (69) hide show
  1. package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +19 -12
  2. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +4 -3
  3. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +13 -15
  4. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/cases-to-specify.md +4 -4
  5. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +21 -0
  6. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/provenance.md +4 -2
  7. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +7 -4
  8. package/package/corpus/skills/cratis-screenplay-automations-and-translations/verification.json +4 -4
  9. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +38 -36
  10. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/complete-examples.md +1 -1
  11. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/invocation-identity.md +84 -0
  12. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/refusals-and-redelivery.md +102 -0
  13. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/specifying-triggers-and-clock.md +4 -2
  14. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/verification.json +1 -1
  15. package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +28 -16
  16. package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +9 -0
  17. package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +15 -13
  18. package/package/corpus/skills/cratis-screenplay-command-surface/references/operations.md +80 -0
  19. package/package/corpus/skills/cratis-screenplay-command-surface/references/policy-persona-seed.md +23 -1
  20. package/package/corpus/skills/cratis-screenplay-command-surface/verification.json +2 -2
  21. package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +9 -6
  22. package/package/corpus/skills/cratis-screenplay-discovery/references/storming-loop.md +6 -5
  23. package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +7 -5
  24. package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +6 -5
  25. package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +39 -49
  26. package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +5 -3
  27. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +48 -8
  28. package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +44 -42
  29. package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +46 -9
  30. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +35 -11
  31. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +118 -13
  32. package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +3 -3
  33. package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +11 -6
  34. package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +1 -1
  35. package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +11 -2
  36. package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +10 -0
  37. package/package/corpus/skills/cratis-screenplay-read-surface/references/guarded-actions.md +79 -0
  38. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +9 -7
  39. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +6 -3
  40. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/verification.json +2 -2
  41. package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +3 -2
  42. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +13 -2
  43. package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +3 -2
  44. package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +3 -2
  45. package/package/corpus/skills/cratis-screenplay-slice-design/references/slicing.md +40 -0
  46. package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +24 -16
  47. package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +103 -0
  48. package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +5 -6
  49. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +4 -4
  50. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +4 -2
  51. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/verification.json +2 -2
  52. package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +34 -32
  53. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +1 -1
  54. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +47 -2
  55. package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +57 -9
  56. package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +6 -1
  57. package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +19 -10
  58. package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +4 -2
  59. package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +8 -1
  60. package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +90 -27
  61. package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +10 -6
  62. package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +29 -12
  63. package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +91 -136
  64. package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +7 -5
  65. package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +20 -0
  66. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +9 -5
  67. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +8 -1
  68. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +2 -2
  69. package/package.json +1 -1
@@ -31,16 +31,12 @@ source is the single flow model.
31
31
  | `Cratis.Screenplay` | `4.31.0` | Original examples and executable boundaries |
32
32
  | `Cratis.Screenplay` | main `fd18129` | Inline events, repairs and canonical `optional`; changed examples compiled |
33
33
  | `Cratis.Screenplay` | `4.66.0` (`c89198b`) | Binding behaviour of `handler`, code attachments, `persona` and compliance attributes: `Semantics/SemanticModelBinder*.cs`, `Diagnostics/DiagnosticCodes.cs` |
34
- | `Cratis.Screenplay` | `4.68.0` (`79801bf`) | Current pin: generated values and responses (ESM v7): decisions 0025 and 0026, `commands.md`, `Semantics/Versions.cs`, `SemanticModelBinder.CommandProductions.cs` |
34
+ | `Cratis.Screenplay` | `4.68.0` (`79801bf`) | Historical generated-value/response rule probes (ESM v7) |
35
+ | `Cratis.Screenplay` | `4.125.0` | Current source guidance: routes, operations, negation, protected identifiers and pre-generation contexts; released `commands.md`, `operations.md`, `policies.md`, `context.md`, `diagnostics.md` |
35
36
 
36
- The update follows `commands.md`, `events.md`, `types.md`, `diagnostics.md`,
37
- `mcp/authoring-tools.md` and decision 0023 at that main commit (after v4.52.0).
38
- Compilation checks syntax and model consistency, not reference execution.
39
-
40
- Checked against the Screenplay repository at tag `v4.31.0` (commit `355dffb`):
41
- `Documentation/screenplay/{commands,constraints,policies,context,concepts,diagnostics}.md`
42
- and decisions 0001 and 0003 established the original baseline. Changed examples
43
- use the newer main commit above; do not attribute their verification to the old tag.
37
+ Historical examples/probes retain the table's original versions; current source
38
+ guidance is not a relabeled old execution result. Compilation checks syntax and
39
+ model consistency, not reference execution. Pins: toolchain `references/versions.md`.
44
40
 
45
41
  "Parses" and "runs" are different claims. The executable profile, and what
46
42
  each construct binds to, is in the `cratis-screenplay-model-authoring` language
@@ -84,7 +80,10 @@ renders this from v4.29.0. The executable model still stops at `PLAY0268` for ei
84
80
  event source id (`CHR0034`) and `[Encrypted]` on one (`CHR0052`); Screenplay reports
85
81
  `PLAY0515` for `@pii` from Screenplay 4.69.1 and for `@sensitive` from 4.84.1, on a
86
82
  command identifier, an explicit `for` destination or an event source identifier; earlier
87
- versions compile it silently and only Chronicle catches it. Keep the stream identity a surrogate `Uuid`
83
+ versions compile it silently and only Chronicle catches it. Current PLAY0515
84
+ also covers scalar stream-id types, composite parts and nested route mapping
85
+ sources. It is a source error, including typed destinations, not a binding-only
86
+ warning. Keep the stream identity a surrogate `Uuid`
88
87
  concept and carry the personal value (name, email) as a separate `@pii` property and a
89
88
  secret as a `@sensitive` property.
90
89
 
@@ -271,6 +270,19 @@ produces when isProForma == true
271
270
  for invoiceId
272
271
  ```
273
272
 
273
+ ## Routes and external operations
274
+
275
+ Named event sources/streams and command routes bind as ESM v8 at 4.125.0;
276
+ CLI 3.41.0 render rejects models above v7. The complete checked route example
277
+ and nested `streamId =` form are in `cratis-screenplay-toolchain`
278
+ `references/sources-and-streams.md`.
279
+
280
+ Use `system`, `uses` and inline/standalone `operation` declarations to state
281
+ external work in the authored production sequence, with execute/compensate phase
282
+ intent. These remain unadmitted (PLAY0268), not post-commit reactions. Read
283
+ [operation intent](references/operations.md) for forms, boundaries and checked
284
+ failure/compensation specification syntax.
285
+
274
286
  ## `concurrency`
275
287
 
276
288
  Five dimensions, each at most once, and at most one `concurrency` block per
@@ -292,8 +304,9 @@ to the routed scope. This does not make command `reads` protected.
292
304
 
293
305
  ## Generated values and responses (ESM v7)
294
306
 
295
- A `generated` property and a `returns` response need standalone `screenplay` 4.68.0; the cratis CLI reports
296
- `PLAY0268` and Stage refuses them, so such a command is **not rendered yet**: hand-write it.
307
+ Generated values/responses bind as ESM v7, including in the current CLI bundle.
308
+ CLI 3.41.0 admits v7 to Stage planning; its canonical corpus gets generated-value
309
+ and response refusals STAGE-ESM-028/029. Binding is not a render claim.
297
310
  Read [references/generated-values-and-responses.md](references/generated-values-and-responses.md) when adding or
298
311
  reviewing `generated` properties, `returns` responses, or decision 0023 constructs.
299
312
  Read `cratis-screenplay-toolchain/references/generated-responses-example.md` when adding generated command values or response assertions and you need a complete compiled example.
@@ -355,10 +368,9 @@ Four contexts, and **what each omits is load-bearing** — when writing a code b
355
368
 
356
369
  ## Verify
357
370
 
358
- - [ ] Standalone `screenplay <model> --warnaserror` (4.68.0) reports zero errors and zero
359
- warnings; or `cratis screenplay validate --warnings-as-errors` on the model folder
360
- (3.28.2 and 3.28.3 bundle Screenplay 4.66.0, ESM v6 at most; before 3.28.2 bundled 4.60.1, ESM v5
361
- or lower). Name which tool produced the result.
371
+ - [ ] Validate the complete model root with warnings as errors; name the tool,
372
+ version and result. Current pins: standalone 4.125.0 / CLI 3.41.0; bundle
373
+ compatibility and execution are separate checks.
362
374
  - [ ] No unintended `PLAY0478` or `PLAY0479` information remains.
363
375
  - [ ] At most one command property carries `identifier`, and no event property does.
364
376
  - [ ] Format rules live on the `concept`; state-dependent rules are specifications.
@@ -50,6 +50,15 @@ time: `CommandAs<T>()`, `ArgumentsAs<T>()`, `ArtifactAs<T>()`, `ValueAs<T>()`, a
50
50
  `StateAs<T>()`/`EventAs<T>()` on the reducer context. A payload of another type
51
51
  throws `ContextPayloadTypeMismatch`.
52
52
 
53
+ At Screenplay 4.125.0, typed contexts before generation (`CommandValidation`,
54
+ `ConceptValidation`, `RulePredicate`, `PolicyPredicate`) expose **input properties
55
+ only**. Generated values exist only after authorization/validation, so they are
56
+ absent from those shapes. A generated identifier's policy subject is `unavailable`,
57
+ not the eventual id; never authorize against it. The handler CommandContext retains
58
+ the full command shape, including generated properties. Sidecars belong to the same
59
+ compilation/revision as their requirements, not a shape borrowed from another model.
60
+ Source: `v4.125.0:Documentation/screenplay/context.md`.
61
+
53
62
  ## The values they carry
54
63
 
55
64
  | Type | Members |
@@ -1,10 +1,13 @@
1
1
  ## Generated values and responses (ESM v7)
2
2
 
3
- A `generated` command property and a `returns` response bind and execute from the standalone
4
- `screenplay` 4.68.0 (ESM v7, decision 0026; `commands.md` "Generated values and responses" at
5
- `v4.68.0`). The cratis CLI 3.28.3 bundles 4.66.0 and reports `PLAY0268` for them, and Stage 4.24.2
6
- refuses ESM v7 with `STAGE-ESM-016` (tracked in Stage#201), so a command that uses them is
7
- **not rendered yet**: hand-write it (gap-fill) with the model as the contract. Complete compiled example:
3
+ A `generated` command property and `returns` response bind and reference-execute
4
+ as ESM v7. Current pins are standalone Screenplay 4.125.0 and CLI 3.41.0
5
+ (bundled Screenplay 4.114.0/Stage 4.51.3); `cratis-screenplay-toolchain`
6
+ `references/versions.md` owns the table. CLI#261 is closed: CLI now admits v7
7
+ to Stage planning, but its v7 canonical corpus receives Stage generated-value
8
+ and response refusals STAGE-ESM-028/029. Do not turn this into a blanket compiler
9
+ refusal or promise a render from binding alone. Preserve the contract for gap-fill
10
+ where admission refuses. Historical rules below were read at 4.68.0. Complete compiled example:
8
11
  `cratis-screenplay-toolchain` `references/generated-responses-example.md`.
9
12
 
10
13
  ```screenplay excerpt
@@ -40,12 +43,11 @@ Rules (all read at `v4.68.0`):
40
43
  - Generated values give no idempotency, retry or deduplication guarantee. Specifications supply fixtures and assert
41
44
  the response: `cratis-screenplay-specifications`.
42
45
 
43
- Other decision 0023 constructs are still **authorable, never executable** (binding reports `PLAY0268`, so
44
- they stop a model at V1): operations, and named event sources and streams with command routes
45
- (`eventsource`, `stream`, `streamId`). **No supported ESM version admits them**, and they have no version number
46
- yet (decision 0025 numbers a version only at its release-ready admission). Syntax or MCP acceptance is not proof of
47
- execution. A model using sources, streams or routes can be authored and validated, but
48
- not bound, run or rendered; hand-write the code with the model as contract
49
- (`cratis-screenplay-toolchain` `references/sources-and-streams.md`). `derive` and `provide` have no documented syntax at that tag; treat them as
50
- planned and do not write them.
46
+ Operations remain authorable/unadmitted (PLAY0268). Named event sources,
47
+ streams and command/specification routes instead bind and reference-execute as
48
+ ESM v8 at 4.125.0; CLI 3.41.0 render refuses versions above v7 before planning
49
+ (CLI-RENDER-004). Syntax/MCP acceptance alone is not execution. Source/stream
50
+ forms and realization boundary: `cratis-screenplay-toolchain`
51
+ `references/sources-and-streams.md`. Do not infer further syntax or provider
52
+ admission from decision numbers.
51
53
 
@@ -0,0 +1,80 @@
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
+ # Systems and operation intent
5
+
6
+ ## Contents
7
+
8
+ - Declare and produce
9
+ - Phases and ordered work
10
+ - Specification intent
11
+
12
+ ## Declare and produce
13
+
14
+ A top-level `system` names an external business system. A slice-owned `operation`
15
+ declares exactly one `uses <System>`, typed inputs, optional description and
16
+ execute/compensate phases. Operations and their specification steps are
17
+ **authoring-only** at Screenplay 4.125.0: compile acceptance is not execution;
18
+ binding refuses the whole model with PLAY0268. Source: released `operations.md`.
19
+
20
+ `produces operation <Name>` declares an inline slice-owned operation with typed
21
+ input mappings. Plain `produces <Name>` references an existing event or operation;
22
+ it never creates one from a typo. Event and operation names share resolution:
23
+ collisions/ambiguity refuse, not event-first guessing. Standalone operation
24
+ references can be qualified across slices; that does not broaden event-production
25
+ grammar. Operations are produced by commands, not reactions, and take no `for`,
26
+ tags or event routing metadata. Inputs cannot be identifier/generated properties.
27
+
28
+ ## Phases and ordered work
29
+
30
+ Keep mixed event/operation productions in their authored sequence. The intended
31
+ future transaction contract enrolls events first, executes operations in authored
32
+ order before commit, and compensates according to commit disposition. It does
33
+ not promise reverse compensation order, rollback or post-commit delivery.
34
+
35
+ Each phase accepts a description and one direct file/tagged body or an
36
+ `implementation` wrapper with ordered nonblank hints and optional source.
37
+ Direct/wrapped sources cannot mix; duplicate phases/payloads refuse.
38
+ Description-only/hints-only phases are pending intent, not executable code.
39
+ Typed `execute Type` remains an input; bare `execute` opens a phase. Escape an
40
+ input named uses as `@uses`, and event-metadata input names where needed.
41
+ No automatic operation extraction ships: moving an inline declaration manually
42
+ must preserve its production sequence, mappings, comments and attachment paths.
43
+
44
+ ## Specification intent
45
+
46
+ This complete authoring-only model compiles with `--warnaserror` at 4.125.0.
47
+ `screenplay test` intentionally returns exit 3/unbound with PLAY0268; it proves
48
+ no failure/compensation behavior today:
49
+
50
+ ```screenplay
51
+ system Accounting
52
+ concept ProjectId : Uuid
53
+ module Projects
54
+ feature Registration
55
+ slice StateChange Register
56
+ operation OpenCostCenter
57
+ uses Accounting
58
+ projectId ProjectId
59
+ execute
60
+ description "Open a provisional cost center"
61
+ compensate
62
+ description "Close it if registration does not commit"
63
+ command RegisterProject
64
+ projectId ProjectId identifier
65
+ produces OpenCostCenter
66
+ projectId = projectId
67
+ specification Compensating
68
+ given operation OpenCostCenter fails
69
+ when RegisterProject
70
+ projectId = "3fa85f64-5717-4562-b3fc-2c963f66afa6"
71
+ then operation OpenCostCenter
72
+ projectId = "3fa85f64-5717-4562-b3fc-2c963f66afa6"
73
+ then compensated OpenCostCenter
74
+ ```
75
+
76
+ `given operation ... fails` and `then compensated ...` are leaves. A requested
77
+ `then operation` can state a partial input subset, with unique fields and
78
+ compatible concrete values. References resolve against declared operations;
79
+ compensation intent needs a declared compensate phase. Provider execution is a
80
+ separate future admission, never implied by a source fixture.
@@ -20,7 +20,7 @@ persona Accountant
20
20
  policy IsAccountant
21
21
  ```
22
22
 
23
- Three condition forms: `authenticated`, `role "<name>"`, and
23
+ Condition atoms: `authenticated`, `role "<name>"`, and
24
24
  `claim "<name>" matches subject | "<value>" | <path>`. A policy has **exactly one**
25
25
  `require` line — continue the condition on deeper-indented lines instead of adding
26
26
  a second (`PLAY0441`) — **or** one implementation (a tagged ` ```csharp ` block or
@@ -29,6 +29,28 @@ runner; a code policy binds as opaque ESM v3 and needs a target to evaluate it.
29
29
  A `persona` is authoring metadata: the binder reports it as information `PLAY0270`
30
30
  (report-only) and it does not block binding; an unknown policy it lists is an error.
31
31
 
32
+ ## Policy negation
33
+
34
+ At Screenplay 4.125.0, `not <condition>` is a portable ESM v7 policy-condition
35
+ form (decision 0027), not a named-policy operator in `authorize`. It can negate
36
+ atoms/groups, not an opaque inline/file implementation. Precedence is `not`,
37
+ then `and`, then `or`; parentheses override grouping. Double negation restores
38
+ a known value, not an unknown target.
39
+
40
+ Missing caller claims compared to a known text target have no match (false),
41
+ so their negation is true. A missing/null/non-text comparison target or absent
42
+ subject is instead **unknown**. `not unknown` stays unknown; final unknown denies.
43
+ Kleene combinations preserve known decisive values: true OR unknown is true,
44
+ false AND unknown is false; false OR unknown and true AND unknown stay unknown.
45
+ `not role "Service"` alone does not require authentication: retain an explicit
46
+ `authenticated` condition when a signed-in caller is required.
47
+
48
+ Opaque predicates reached in authored short-circuit order return unsupported,
49
+ never false or permission under negation. Binding warns with PLAY0546 when a
50
+ negated claim's target is optional, non-string, or a subject without a command
51
+ identifier. This C# semantic check does not come from ordinary editor validation.
52
+ Source: `v4.125.0:Documentation/screenplay/policies.md`.
53
+
32
54
  ## `seed`
33
55
 
34
56
  Excerpt: `CustomerRegistered` is declared in a slice.
@@ -75,13 +75,13 @@
75
75
  },
76
76
  {
77
77
  "kind": "skill-contains",
78
- "value": "No supported ESM version admits them", "file": "references/generated-values-and-responses.md"
78
+ "value": "streams and command/specification routes instead bind and reference-execute as", "file": "references/generated-values-and-responses.md"
79
79
  },
80
80
  { "kind": "skill-contains", "value": "Generated values and responses (ESM v7)" },
81
81
  { "kind": "skill-contains", "value": "A generated value is not a request input", "file": "references/generated-values-and-responses.md" },
82
82
  { "kind": "skill-contains", "value": "(`PLAY0273`), and a concept with any validation rule cannot back a\n generated property (`PLAY0268`)", "file": "references/generated-values-and-responses.md" },
83
83
  { "kind": "skill-contains", "value": "A response exists only on acceptance", "file": "references/generated-values-and-responses.md" },
84
- { "kind": "skill-contains", "value": "**not rendered yet**", "file": "references/generated-values-and-responses.md" },
84
+ { "kind": "skill-contains", "value": "STAGE-ESM-028/029", "file": "references/generated-values-and-responses.md" },
85
85
  { "kind": "skill-contains", "value": "4.68.0" }
86
86
  ]
87
87
  }
@@ -48,7 +48,8 @@ Statements here were checked at those tags:
48
48
 
49
49
  | Fact used here | Source |
50
50
  | --- | --- |
51
- | Persona syntax, report-only, policies must be declared, `description` first and once | Screenplay `v4.66.0:Documentation/screenplay/personas.md` |
51
+ | Persona syntax, report-only, policies must be declared | Screenplay `v4.66.0:Documentation/screenplay/personas.md` |
52
+ | Description order; authored/import board order and order-preserving MCP layouts | Screenplay `v4.125.0:Documentation/screenplay/grammar.md`, `folders.md`, `imports.md` |
52
53
  | Single-line and fenced `description` (`FencedText`) | `v4.66.0:Documentation/screenplay/slices.md#descriptions`, `grammar.md:1084-1088` |
53
54
  | `<Type>[]`, shapes must be declared; `@pii` and `reason` on concepts | `v4.66.0:Documentation/screenplay/events.md`, `concepts.md` |
54
55
  | `then denied`, `given caller`, `then error` | `v4.66.0:Documentation/screenplay/specifications.md` |
@@ -136,12 +137,14 @@ decided apart from what you assumed. Never guess silently.
136
137
  - Slice types are a closed set: `StateChange`, `StateView`, `Automation`, `Translate`. In
137
138
  discovery an event lives in the `StateChange` slice that will produce it, named after the
138
139
  probable command; a slice with only an `event` compiles.
139
- - A `persona` names declared policies only (unknown policy = error); `description` is the
140
- first body line and appears once.
140
+ - A `persona` names declared policies only (unknown policy = error); `description` appears
141
+ at most once, anywhere in its body.
141
142
  - Declare each event once in the whole application; other slices refer to it by name.
142
- - Folder-layout round-trips re-sort modules, features and slices by name (a single document
143
- keeps authored order at v4.66.0): story order is documentation (feature `description`,
144
- STATE.md), never structure.
143
+ - Boards keep authored declaration and import order: imports expand depth-first, glob
144
+ matches alphabetically. Unimported folder files remain visible after ranked siblings.
145
+ MCP `expand-layout` preserves this order with import barrels; an import-less
146
+ `PlayFileWriter.Expand` layout falls back to path order. Order is presentation, not
147
+ execution or identity. Keep causes and branches in the feature `description` and STATE.md.
145
148
  - A misspelt keyword inside a slice is only warning PLAY0029 and the block disappears: always
146
149
  validate with warnings as errors.
147
150
 
@@ -29,7 +29,7 @@ then reports what changed and asks one question. The user should always be able
29
29
  | rename | better business name for an existing fact | identity-affecting once persisted: see SKILL.md |
30
30
  | split | one name was covering two facts | keep the original if it is persisted; add the second |
31
31
  | merge | two names for one fact | only when they truly mean the same thing |
32
- | reorder | the story order changed | update the feature `description`/STATE.md; files sort by name |
32
+ | reorder | the story order changed | change declaration/import order for the board; update the feature `description`/STATE.md for causes and branches |
33
33
  | drop | not a fact after all | record why in STATE.md |
34
34
  | none | already modeled | say so briefly |
35
35
 
@@ -65,10 +65,11 @@ open, start the sweep (`divergent-sweep.md`).
65
65
  ## A discovery skeleton
66
66
 
67
67
  What a model looks like after the first workflow has been stormed: no commands, read models
68
- or screens yet. Slices are named after the command expected to produce each event and are
69
- sorted by name when a folder layout is written back (a single document keeps authored order
70
- at v4.66.0), so the order of the story lives in the feature `description`, not in position. Persona
71
- `description` text holds Does / Reads / Cannot on one quoted line here; the multi-line fenced
68
+ or screens yet. Slices are named after the command expected to produce each event. At
69
+ Screenplay 4.125.0, boards use authored declaration/import order, and MCP `expand-layout`
70
+ preserves it with imports. An import-less `PlayFileWriter.Expand` layout still falls back to
71
+ path order. Order is presentation only; the feature `description` records causes and branches.
72
+ Persona `description` text holds Does / Reads / Cannot on one quoted line here; the multi-line fenced
72
73
  form is in `personas-and-causes.md`.
73
74
 
74
75
  ```screenplay
@@ -134,11 +134,13 @@ What binds depends on **which tool** you ask, so name the tool and its version:
134
134
  - `persona` declarations are report-only and never block; `@pii` and `@sensitive`
135
135
  concepts do block binding (`PLAY0268`). Keep them anyway: the classification is
136
136
  part of the model. Report the block.
137
- - Generated values and `returns` responses bind and execute from standalone 4.68.0 (ESM v7) but fail binding
138
- with `PLAY0268` on the 4.66.0 bundled in `cratis` 3.28.x, and Stage 4.24.2 does not render them
139
- (`STAGE-ESM-016`, tracked in Stage#201): gap-fill. Operations and systems, and event sources and
140
- streams, are authorable but non-executable (`PLAY0268`; not admitted by any supported ESM version);
141
- a command `handler` never binds.
137
+ - Generated values/responses bind and reference-execute as v7; sources, streams
138
+ and command/specification routes as v8; reaction `runs as` identity as v10 on
139
+ standalone 4.125.0. Use `screenplay test` or MCP `run-specifications` for V4.
140
+ Operations/systems, exact numbers and refusal/redelivery remain unadmitted.
141
+ CLI 3.41.0 bundles older syntax and renders through v7 only: its parser rejects
142
+ `runs as`, and Stage refuses generated values/responses with STAGE-ESM-028/029.
143
+ Source/binding admission and target realization are separate gates.
142
144
 
143
145
  The ESM versions, the full disposition table and the Step 7 clock example's binding
144
146
  result are in [references/parsed-not-runnable.md](references/parsed-not-runnable.md)
@@ -32,8 +32,8 @@ module Invoicing
32
32
  description "Registering and managing the lifecycle of invoices"
33
33
  ```
34
34
 
35
- `description` is the optional **first body line** of a module, feature, slice,
36
- persona or command; at most one. Use a fenced block tagged ` ```text ` when one line
35
+ `description` is optional on a module, feature, slice, persona or command;
36
+ at most one, anywhere in its body. Use a fenced block tagged ` ```text ` when one line
37
37
  is not enough (a bare fence warns with `PLAY0397`).
38
38
 
39
39
  ## Step 2 — Brainstorm events
@@ -59,9 +59,10 @@ Phase skill: `cratis-screenplay-discovery`.
59
59
  Arrange into the timeline — the plot. *"What happens first? And then what
60
60
  happens?"* Identify the happy path **and** the alternative and error paths.
61
61
 
62
- **Output:** the order the slices will be written in. A folder round-trip sorts
63
- modules, features and slices by name, so the timeline is documentation, not
64
- structure.
62
+ **Output:** the authored declaration/import order for the board, with causes
63
+ and branches documented. Screenplay 4.125.0 MCP layouts preserve this presentation
64
+ order with imports; an import-less `PlayFileWriter.Expand` layout uses path order.
65
+ Timeline position does not impose execution order or change identities.
65
66
 
66
67
  ## Step 4 — Create wireframes
67
68
 
@@ -1,63 +1,53 @@
1
1
  # Parsed is not runnable: ESM versions and dispositions
2
2
 
3
- Facts read at Screenplay `v4.68.0` (`79801bf`; the persona, operation and stream rows were first read at `v4.66.0`): `Source/DotNET/Screenplay/Semantics/Versions.cs`,
4
- `SemanticModelBinder.cs` (`ReportTopLevelDispositions`), `SemanticModelBinder.CommandProductions.cs`,
5
- `Documentation/screenplay/{commands,operations,event-sources}.md` and decisions 0025 and 0026. Tool versions and which tool
6
- reports what: `cratis-screenplay-toolchain` `references/versions.md`.
3
+ Current evidence: Screenplay v4.125.0 `SemanticModelBinder.cs`, `Versions.cs`,
4
+ `Documentation/screenplay/{commands,operations,event-sources,reactions,tool}.md`.
5
+ The binder selects v8 for event routes and v10 for declared reaction identity.
6
+ Pins and consumer boundaries: toolchain `references/versions.md`.
7
7
 
8
8
  ## Which ESM version a model needs
9
9
 
10
- - **v1** by default.
11
- - **v2** for typed event-source facts: `produces ... for <identifier>` when the event does not
12
- repeat the identifier, `for` values in specifications, and `$context.occurred` or caller
13
- identity in `produces`.
14
- - **v3** for code the model hands off: bodied reducers, code validation, code policies. Code
15
- binds as an opaque requirement; the reference runner reports any specification that needs it
16
- as unsupported. A command `handler` (including `implementation` and `hint`) never binds
17
- (`PLAY0268`).
18
- - **v4** for event-contract lineage (multiple event generations) and **v5** for keyed read-model
19
- absence assertions (`then no readmodel`).
20
- - **v6** for reactions, captures, application triggers and the clock (and so `Automation` and
21
- `Translate` slices).
22
- - **v7** for generated command properties, `returns` responses, generated fixtures and `then returns`
23
- expectations, and only when one is used (standalone 4.68.0 or later; decision 0026).
24
- - Operations, event sources and streams, decision reads and exact numbers are **not admitted by any
25
- supported ESM version**; they have no number until a release-ready admission (decision 0025).
10
+ - v1 by default; v2 for typed event-source facts and admitted occurrence/audit mappings.
11
+ - v3 for opaque code requirements. Reference execution cannot execute their bodies.
12
+ - v4 for event-contract lineage; v5 for keyed read-model absence assertions.
13
+ - v6 for admitted reactions, captures, application triggers and clock.
14
+ - v7 for generated command values, responses, fixtures/return assertions and policy negation.
15
+ - v8 for sources/streams and command/specification routes.
16
+ - v9 for public-event contracts; v10 for reaction `runs as system` identity.
17
+ - Operations/systems, exact numeric mode and refusal/redelivery remain unadmitted
18
+ (PLAY0268). Version allocation is not inferred from an older planning decision.
26
19
 
27
20
  ## Dispositions to keep apart
28
21
 
29
- | Construct | Authoring | Binding at 4.68.0 |
30
- | --- | --- | --- |
31
- | `persona` | accepted | information `PLAY0270` ("authoring metadata and is not part of ESM v1 behavior"). Never blocks; an unknown policy on a persona is an error |
32
- | `domain`, `authentication` | accepted | report-only information (`PLAY0270`) |
33
- | `@pii`, `@sensitive` on a concept | accepted | `PLAY0268`, blocks binding and rendering |
34
- | `reads`, `concurrency` on a command | accepted | `PLAY0271` |
35
- | `reads` under a reaction trigger that only `invokes` | accepted | information `PLAY0270`: report-only intent, the model does not consult the view |
36
- | `reads` under a reaction trigger that `produces` directly | accepted | `PLAY0268` |
37
- | Generated properties, `returns` responses | authorable | binds and runs as ESM v7 on standalone 4.68.0; `PLAY0268` on the 4.66.0 in `cratis` 3.28.x; not rendered (Stage 4.24.2: `STAGE-ESM-016`, tracked in Stage#201) |
38
- | A policy, rule or requirement that references a generated value | accepted | `PLAY0273`; a generated property on a concept with validation rules: `PLAY0268` |
39
- | `system`, `operation` | authorable, syntax-only | `PLAY0268`; not admitted by any supported ESM version |
40
- | `eventsource`, `stream` | authorable, authoring-only | `PLAY0268`; not admitted by any supported ESM version (`cratis-screenplay-toolchain` `references/sources-and-streams.md`) |
41
- | UI constructs | accepted | information `PLAY0269` |
42
-
43
- A model that carries one of the blocked constructs is still a valid design model. Never remove
44
- the construct to make a tool pass; record the gap against its address
45
- (`cratis-screenplay-modeling-lifecycle`).
22
+ | Construct | Current standalone disposition |
23
+ | --- | --- |
24
+ | `persona`, domain/authentication metadata | Report-only; unknown named policies remain source defects |
25
+ | Compliance concepts | Preserve protection; portable binding gaps are not permission to remove it |
26
+ | Command reads/concurrency | Legacy unprotected decisions, PLAY0271 |
27
+ | Invokes-only trigger reads | Report-only, not protected state; direct production with reads refuses |
28
+ | Generated values/responses | v7 binding/reference execution; Stage 4.51.3 member refusals STAGE-ESM-028/029 |
29
+ | Sources/streams and command/specification routes | v8 binding/reference execution; CLI 3.41.0 render boundary is v7 |
30
+ | Declared reaction invocation actor | v10 binding/reference execution; older CLI parser PLAY0137; Stage planner refuses v10 |
31
+ | Operations/systems, exact numbers, refusal/redelivery | Source accepted; whole binding refuses PLAY0268 |
32
+ | UI | Authoring/deferred metadata; runtime support is a separate consumer contract |
33
+
34
+ Run standalone `screenplay test` or MCP `run-specifications` for V4. Compile
35
+ success alone is not execution; unbound/unsupported is not passed. Preserve
36
+ source that a narrower renderer cannot realize and report the addressed gap.
37
+ Routing and actor checked examples: toolchain `references/sources-and-streams.md`
38
+ and captures-and-reactions `references/invocation-identity.md`.
46
39
 
47
40
  ## The Step 7 clock example
48
41
 
49
- The complete example in [nine-steps.md](nine-steps.md) (Step 7) compiled with
50
- `screenplay <folder> --warnaserror` 4.66.0 (0 errors, 0 warnings) and opened through
51
- `screenplay mcp <folder>` with `executableReady: true` and five `PLAY0270` information
52
- diagnostics. It binds as a scheduled invocation; its `reads` is intent only, so the overdue
53
- decision is not executed by the model. The `cratis` 3.28.2 bundle (Screenplay 4.66.0) binds it the same way (probed); the 3.27.1 bundle
54
- (Screenplay 4.60.1, ESM v1 to v5) compiled it but rejected the Automation slice at binding. Report reaction
55
- specifications as authored, not as run, unless a V4 run says otherwise.
42
+ The complete example in [nine-steps.md](nine-steps.md) (Step 7) had historical
43
+ 4.66.0 compile/binding evidence (zero errors/warnings, executableReady true).
44
+ Its invokes-only reads still record intent rather than execute the overdue
45
+ selection. Run its admitted specifications with the current reference route
46
+ before claiming a V4 pass; no overdue-selection proof follows from binding.
56
47
 
57
48
  ## Decision 0006 and shipped generations
58
49
 
59
- Decision 0006 shipped in Screenplay 4.31.0: a reaction trigger can declare the
60
- views it decides from with `reads` (see `cratis-screenplay-captures-and-reactions`),
61
- but nothing enforces them yet. Event generations and typed repairs now ship;
62
- generations do not supply deployed migrations. Do not treat every accepted
63
- decision as implemented: check the construct's own page and the versions table.
50
+ Trigger reads do not enforce decision consistency. Event generations and typed repairs now ship,
51
+ but historical schemas do not supply deployed migrations.
52
+ Check actual binder, runner and consumer admission instead of equating an
53
+ accepted decision or parsed node with a running application.
@@ -44,7 +44,7 @@ v19.32.0): `cratis-screenplay-toolchain` `references/versions.md`. Checked at th
44
44
  | `prologue start` is an interactive wizard that writes `cratis-prologue.json`; `interpret` resolves its language model from the Prologue file, then the global CLI configuration (cli#241 open) | cli `v3.28.2:Source/Cli/Commands/Prologue/{StartPrologueCommand,LlmOptionsResolver}.cs`, `Documentation/reference/prologue.md` |
45
45
  | Extractor effects (CDC enable, publication and replication slot), POST/PUT/DELETE only, 2 s correlation window, interpret payload (uncapped model outline and names, observed lists capped at 50, schema tables capped per schema observation), existing slot/publication reused; cleanup missing (Prologue#37) | Prologue `ad4bbe7:Source/Extractor/Sources/**`, `Source/Configuration/*`, `Source/Interpretation/EvidenceFormatter.cs` |
46
46
  | `then error`, `then denied`, `unique ... released by` | Screenplay `v4.66.0:Documentation/screenplay/{specifications,constraints}.md` |
47
- | No semantic diff or equivalence check exists (Screenplay#387 open) | `gh issue view 387 --repo Cratis/Screenplay` |
47
+ | MCP semantic-diff compares canonical workspace exports; structural comparison is not execution equivalence | Screenplay `v4.125.0:Documentation/screenplay/mcp/reference.md` |
48
48
 
49
49
  Every complete `screenplay` fence here compiles with the standalone compiler 4.68.0 (`--warnaserror`) and
50
50
  `cratis screenplay validate --warnings-as-errors` 3.28.2.
@@ -191,8 +191,10 @@ handoff packet appended, first line `Outcome:`; no prose reports in the model ro
191
191
  ask again only when target or consequence expands): capture setup and Extractor runs, traffic
192
192
  re-routing, load or scenario runs that write data, cleanup DDL, hosted language-model use.
193
193
  Production needs DBA sign-off (`rules/capability-is-not-authority.md`).
194
- - No claims of equivalence: Screenplay has no semantic diff or equivalence check yet
195
- (Screenplay#387).
194
+ - No claims of execution equivalence from structure. MCP `semantic-diff` compares
195
+ same-application canonical exports with authoritative catalogs; it does not guess
196
+ rename continuity, run specifications or prove recovered behavior. Inspect
197
+ incomplete sections and exclusions before using the result in the loss report.
196
198
  - Never weaken protection (authorization, `@pii`, rules) to make the candidate compile.
197
199
 
198
200
  ## Gate
@@ -1,5 +1,14 @@
1
1
  # `cratis screenplay generate` notes
2
2
 
3
+ ## Contents
4
+
5
+ - Command
6
+ - Preconditions
7
+ - Coverage (what a provider reads)
8
+ - Diagnostics are the loss list
9
+ - Arc recovery and authoring-only options
10
+ - Reading the output cheaply
11
+
3
12
  Flags verified with `cratis screenplay generate --help` on the version recorded in
4
13
  cratis-screenplay-toolchain `references/versions.md`; behaviour from the cratis CLI
5
14
  (`v3.28.2:Source/Cli/Commands/Screenplay/`; the generate files are unchanged since `v3.27.1`), Arc `v22.50.5`
@@ -8,6 +17,12 @@ cratis-screenplay-toolchain `references/versions.md`; behaviour from the cratis
8
17
  Screenplay.CritterStack `v0.24.0`. Version-specific capability facts belong in cratis-screenplay-toolchain
9
18
  `references/versions.md`.
10
19
 
20
+ Current CLI is 3.41.0, with Arc.Screenplay 22.54.0 (`references/versions.md` in
21
+ the toolchain). Current option/admission evidence: CLI released
22
+ `GenerateScreenplaySettings.cs`, `ArcScreenplayGeneration.cs`, v7 planning specs
23
+ and `Documentation/reference/screenplay.md`; older diagnostic probes below keep
24
+ their original labels. Arc#3054 and CLI#270 describe the recovered-source expansion.
25
+
11
26
  ## Command
12
27
  ```
13
28
  cratis screenplay generate <solution|project|folder> \
@@ -56,14 +71,39 @@ cratis screenplay generate <solution|project|folder> \
56
71
  persistence, stream ownership or authorization.
57
72
  - "Success" only means no error diagnostic was produced. Read warnings and information too.
58
73
 
59
- ## Known lag
60
- The generators are built against older Screenplay packages than the CLI's compiler. Expect
61
- no event generations, no `when append` specifications, and no absence assertions in
62
- generated output, even when the code has them. Reactors are emitted as file-backed
63
- reactions with one named event trigger per observed event (a reactor observing no events
64
- is dropped with a warning), but their bodies and declarative effects are not recovered.
65
- Application triggers (clock, application-defined) are not generated. Record these as
66
- losses, then read the code for them.
74
+ ## Arc recovery and authoring-only options
75
+
76
+ `--authoring-only-constructs` maps to `ScreenplayOptions.AuthoringOnlyConstructs`
77
+ in the Arc adapter (false by default). It includes operations/systems, source and
78
+ stream declarations/routes, and reads/requirements recovered from Provide/Handle.
79
+ Other providers warn CLI0014 and do not apply it. Added syntax does not realize
80
+ code or waive admission: operations refuse PLAY0268 and legacy reads PLAY0271.
81
+ Source/stream routes themselves bind as v8 on the current standalone compiler;
82
+ older blanket authoring-only route caveats are not its current disposition.
83
+
84
+ The expanded Arc recovery surface includes:
85
+ - Proven command identifiers and event `for` destinations.
86
+ - Inline events where one unconditional complete production uniquely owns them.
87
+ - Event description/documentation and generation-1 stored-name rename pins.
88
+ - Unconditional named Must(Method) rules with implementation-file provenance,
89
+ where no specification exercises the command.
90
+ - Event scenarios as `when append`, and event-source-faithful `for` fixtures.
91
+ Scenarios whose sources cannot be stated faithfully are omitted with SP0039;
92
+ record the omission as a loss, never fabricate identities to retain a scenario.
93
+ - Supported generated UUID command values and scalar/record responses by default,
94
+ without the authoring-only flag, for commands without successful scenarios.
95
+ Commands with successful scenarios retain the legacy representation until
96
+ deterministic generation fixtures and response expectations can be recovered.
97
+ Unsupported shapes/pre-generation protection remain code with SP0052.
98
+
99
+ Generated values/responses select ESM v7. CLI 3.41.0 admits v7 to planning, but
100
+ Stage refuses those members with STAGE-ESM-028/029. CLI#261 is closed; do not say
101
+ the compiler or CLI version gate universally refuses v7. Above v7 remains
102
+ CLI-RENDER-004. A generated source model is evidence, not guaranteed render output.
103
+
104
+ Handler/reaction bodies, unresolved conditions and unproven origins still need
105
+ source review. Do not infer generation/evolution/absence-assertion coverage from
106
+ a package upgrade; read diagnostics and reconcile each recovered scenario.
67
107
 
68
108
  ## Reading the output cheaply
69
109
  1. V1 on `.ai-work/screenplay/<model-slug>/legacy/static` (folder mode) with the tool and