@cratis/pi 7.32.0 → 7.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/corpus/agents/screenplay-modeler.md +1 -1
- package/package/corpus/agents/screenplay-renderer.md +1 -1
- package/package/corpus/agents/screenplay-reviewer.md +1 -1
- package/package/corpus/agents/slice-implementer.md +1 -1
- package/package/corpus/rules/profiles.md +1 -0
- package/package/corpus/skills/cratis-application-slice-conformance/LICENSE +2 -2
- package/package/corpus/skills/cratis-application-slice-conformance/SKILL.md +5 -0
- package/package/corpus/skills/cratis-application-slice-conformance/references/checklists.md +12 -0
- package/package/corpus/skills/cratis-application-slice-conformance/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-application-slice-specifications/LICENSE +2 -2
- package/package/corpus/skills/cratis-application-slice-specifications/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-arc-react-page/LICENSE +2 -2
- package/package/corpus/skills/cratis-arc-react-page/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-chronicle-event-modeling/SKILL.md +12 -6
- package/package/corpus/skills/cratis-chronicle-reactor/LICENSE +2 -2
- package/package/corpus/skills/cratis-chronicle-reactor/SKILL.md +5 -2
- package/package/corpus/skills/cratis-chronicle-reactor/references/provenance.md +3 -3
- package/package/corpus/skills/cratis-chronicle-reactor/references/slice-delivery-checklist.md +93 -0
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/LICENSE +2 -2
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/SKILL.md +1 -1
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/provenance.md +3 -3
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/view-lifecycle-checks.md +79 -0
- package/package/corpus/skills/cratis-event-model-diagram/LICENSE +7 -0
- package/package/corpus/skills/cratis-event-model-diagram/SKILL.md +26 -2
- package/package/corpus/skills/cratis-event-model-diagram/references/provenance.md +19 -0
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +16 -11
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +7 -7
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/provenance.md +5 -6
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/public-events-and-direction.md +2 -3
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +9 -5
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +6 -6
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translate-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +16 -15
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/invocation-identity.md +2 -2
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +20 -19
- package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +3 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +1 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/references/enum-numbers.md +93 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +5 -6
- package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +4 -2
- package/package/corpus/skills/cratis-screenplay-delivery-planning/LICENSE +9 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/SKILL.md +118 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/parallel-delivery.md +45 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/provenance.md +29 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/slice-counting.md +43 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/velocity-and-capacity.md +48 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/verification.json +16 -0
- package/package/corpus/skills/cratis-screenplay-discovery/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +6 -5
- package/package/corpus/skills/cratis-screenplay-discovery/references/divergent-sweep.md +1 -0
- package/package/corpus/skills/cratis-screenplay-discovery/references/domain-analysis-template.md +92 -0
- package/package/corpus/skills/cratis-screenplay-discovery/references/personas-and-causes.md +2 -2
- package/package/corpus/skills/cratis-screenplay-discovery/references/provenance.md +4 -3
- package/package/corpus/skills/cratis-screenplay-discovery/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-event-modeling/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +30 -29
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +7 -5
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +13 -10
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +26 -13
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/candidate-inventory.md +6 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +7 -0
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/prologue-safety.md +22 -17
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md +2 -2
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/side-car-migration.md +1 -0
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +25 -25
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +8 -2
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +8 -3
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +38 -8
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/property-links.md +126 -0
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/screen-authoring-workflow.md +3 -4
- package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-model-review/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +8 -8
- package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +2 -2
- package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +4 -4
- package/package/corpus/skills/cratis-screenplay-model-review/references/model-inventory-report.md +75 -0
- package/package/corpus/skills/cratis-screenplay-model-review/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-screenplay-model-review/references/public-keys-and-routes.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-review/references/worked-example.md +4 -3
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +7 -5
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/core-rules-digest.md +131 -0
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/phases.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/provenance.md +25 -4
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/reasoning-notes.md +2 -2
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/verdicts-and-modes.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +5 -4
- package/package/corpus/skills/cratis-screenplay-projections/SKILL.md +9 -5
- package/package/corpus/skills/cratis-screenplay-projections/references/pdl-grammar.md +4 -2
- package/package/corpus/skills/cratis-screenplay-read-surface/LICENSE +7 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +16 -8
- package/package/corpus/skills/cratis-screenplay-read-surface/references/provenance.md +21 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/references/screen-patterns.md +130 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +60 -47
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/delivery-protocol.md +17 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/drift-and-ledger.md +19 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +24 -6
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +21 -16
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/worked-example.md +34 -29
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +5 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +1 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +5 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-example.md +32 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-catalogue.md +7 -6
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md +3 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-workshop.md +15 -7
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +11 -10
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/view-and-story-specs.md +6 -4
- package/package/corpus/skills/cratis-screenplay-slice-design/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +4 -3
- package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +2 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/references/derived-condition-events.md +68 -0
- package/package/corpus/skills/cratis-screenplay-slice-design/references/field-lineage.md +1 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/provenance.md +5 -5
- package/package/corpus/skills/cratis-screenplay-slice-design/references/read-model-design.md +17 -0
- package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +6 -6
- package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +3 -3
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +7 -5
- package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +4 -3
- package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md +3 -2
- package/package/corpus/skills/cratis-screenplay-specifications/references/persona-callers-and-cases.md +3 -0
- package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +3 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +14 -11
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +31 -3
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/chronicle-boundaries.md +6 -6
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +12 -11
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/evolution.md +18 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/provenance.md +4 -4
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +1 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +29 -18
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +3 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +7 -4
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +21 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +5 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +32 -18
- package/package/corpus/skills/cratis-screenplay-toolchain/references/production-routes-and-filters.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +46 -16
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract-exceptions.json +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +1092 -17
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +8 -8
- package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +18 -13
- package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +41 -20
- package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +7 -2
- package/package/corpus/skills/cratis-screenplay-ui-composition/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +10 -10
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/flow-review.md +1 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +41 -16
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/worked-flow.md +17 -9
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +85 -77
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +65 -16
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/case-tables-and-whole-numbers.md +2 -2
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/render-example.md +3 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +30 -15
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +21 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +9 -4
- package/package/profile-catalog.json +1 -0
- package/package.json +1 -1
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
- 8. Chain completion checkpoint
|
|
13
13
|
- 9. Fan-out
|
|
14
14
|
|
|
15
|
-
Complete compiled example: `todo-list-example.md` (binds on Screenplay 4.66.0; the list query
|
|
16
|
-
and retry sweep that
|
|
15
|
+
Complete compiled example: `todo-list-example.md` (binds on Screenplay 4.66.0 and later; the list query
|
|
16
|
+
excerpt binds too, and the retry sweep that needs code is shown as a marked excerpt).
|
|
17
17
|
|
|
18
18
|
## 1. Deciding whether it is an automation
|
|
19
19
|
Write the four parts in one line each:
|
|
@@ -44,12 +44,12 @@ Outcomes:
|
|
|
44
44
|
- A projection that adds an item `from <OpeningFact>` and removes it with
|
|
45
45
|
`remove with <ClosingFact>`. Several facts may open or close; they need not match one to one.
|
|
46
46
|
- A keyed query (`…ById => Item optional` + `by itemId`) for specs and executable scope; a
|
|
47
|
-
list query for the visible queue (
|
|
47
|
+
list query for the visible queue (`=> Item[]` binds since Screenplay 4.105.0; a snapshot list is refused by Stage, `STAGE-ESM-010`).
|
|
48
48
|
- A reaction `when <OpeningFact>` that invokes the command producing the closing fact.
|
|
49
49
|
The trigger may `reads` the item view to document its input; that is not protection.
|
|
50
50
|
- A retry sweep on a clock reads the whole view (no `by` on clock reads). Iterating its items
|
|
51
|
-
declaratively (`for each <View>`) is reserved syntax;
|
|
52
|
-
which the reference never runs. Durable fan-out is outside
|
|
51
|
+
declaratively (`for each <View>`) is reserved syntax; at Screenplay 4.139.0 the sweep needs a code body,
|
|
52
|
+
which the reference never runs. Durable fan-out is outside the language (Screenplay#286).
|
|
53
53
|
- Specify the list as a small story: empty -> item present (`then query …ById`) -> closed
|
|
54
54
|
(`when append <Closing>` + `then no readmodel … for`), plus "not opened" for facts that
|
|
55
55
|
must not queue work.
|
|
@@ -72,8 +72,8 @@ 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).
|
|
76
|
-
construct admission, but reaction identity still refuses STAGE-ESM-034.
|
|
75
|
+
older compiler rejected the syntax (PLAY0137). The pinned CLI/Stage pair (toolchain
|
|
76
|
+
`references/versions.md`) reaches v10 construct admission, but reaction identity still refuses STAGE-ESM-034.
|
|
77
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,
|
|
@@ -59,7 +59,7 @@ See "Effect guarantees and recovery traps" in SKILL.md.
|
|
|
59
59
|
- A capture spec does not acknowledge the source or store a new last-seen record; prefix
|
|
60
60
|
facts that were accepted do not mean the record was processed (Screenplay `captures.md`).
|
|
61
61
|
Record how the target acknowledges.
|
|
62
|
-
- Delivery guarantees, acknowledgements and durable fan-out are outside
|
|
62
|
+
- Delivery guarantees, acknowledgements and durable fan-out are outside the language (Screenplay#286);
|
|
63
63
|
never describe them as provided.
|
|
64
64
|
|
|
65
65
|
## Projection lag and rebuild
|
|
@@ -15,11 +15,10 @@ defaults for missing data) is replaced by "never fabricate a default"; its log-a
|
|
|
15
15
|
handling is replaced by recorded failure facts. `plugins/trogonstack-eda` was skimmed; nothing
|
|
16
16
|
adopted.
|
|
17
17
|
|
|
18
|
-
## Adapted closely (Martin Dilger and Nebulit GmbH
|
|
18
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
19
19
|
|
|
20
20
|
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
21
|
-
by Martin Dilger and Nebulit GmbH (https://nebulit.de)
|
|
22
|
-
is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
21
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
|
|
23
22
|
|
|
24
23
|
| Source file | Used in | How |
|
|
25
24
|
|---|---|---|
|
|
@@ -44,8 +43,8 @@ binds); tool-qualified verdict text; the trusted-actor text now names `[ExecuteC
|
|
|
44
43
|
`reactions.md`, `ReactionIdentityParser.cs`, `ReactionRefusalValidator.cs` and the
|
|
45
44
|
binder's v10 selection; the checked scenario passed reference execution. CLI
|
|
46
45
|
3.41.0's older parser and Stage 4.51.3's v7 planner were historical target limits.
|
|
47
|
-
Previous CLI 3.46.1 refused v10 at its version gate. CLI
|
|
48
|
-
|
|
49
|
-
reaction identity with STAGE-ESM-034
|
|
46
|
+
Previous CLI 3.46.1 refused v10 at its version gate. The pinned CLI/Stage pair
|
|
47
|
+
(toolchain `references/versions.md`) reaches v10 construct checks and still
|
|
48
|
+
refuses reaction identity with STAGE-ESM-034.
|
|
50
49
|
Public/direction forms and routes/filters follow Screenplay v4.135.0 decisions
|
|
51
50
|
0049–0051 and 0060–0066, not the older inbound-only translation scope.
|
|
@@ -123,9 +123,8 @@ Keep correlation and resulting private events in the model and report the runtim
|
|
|
123
123
|
ESM v9 shipped in Screenplay 4.117.0 and is selected only by use of public events,
|
|
124
124
|
origins, direction, event-target builders or events-source captures. At 4.135.0,
|
|
125
125
|
publication reference scenarios execute; imported shapes still refuse binding.
|
|
126
|
-
Stage 4.52.0 (previous CLI 3.46.1)
|
|
127
|
-
|
|
128
|
-
admission through v10 but still refuses publication (STAGE-ESM-032), foreign
|
|
126
|
+
Stage 4.52.0 (previous CLI 3.46.1, history) audited only through v7. The pinned CLI/Stage pair (toolchain `references/versions.md`)
|
|
127
|
+
reaches construct admission through v10 but still refuses publication (STAGE-ESM-032), foreign
|
|
129
128
|
events/events-source captures (STAGE-ESM-033); source admission is not rendering.
|
|
130
129
|
|
|
131
130
|
Source: Screenplay `v4.135.0:Documentation/screenplay/fixtures/public-events.play`,
|
|
@@ -5,11 +5,15 @@ the automation-and-translation addendum to `cratis-screenplay-render-and-gap-fil
|
|
|
5
5
|
skill for the admission, publication and ownership rules.
|
|
6
6
|
|
|
7
7
|
## What Stage does not do
|
|
8
|
-
Stage 4.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
Stage 4.73.1 renders no Automation or Translate slice, reaction or capture (Stage#79): each reaction
|
|
9
|
+
or capture refuses with `STAGE-ESM-024` (plus `-034` runsAs, `-035` filters, `-037` mixed effects). So the
|
|
10
|
+
automation or translation is hand-written delivery with the model as its contract. (History: cratis
|
|
11
|
+
3.28.2 and 3.28.3 refused such a model whole with `STAGE-ESM-016`, and 3.27.1 stopped earlier with PLAY0268.)
|
|
12
|
+
|
|
13
|
+
A reaction that both `produces` events and `invokes` commands stays one modeled reaction. Hand-write one
|
|
14
|
+
reactor that returns the events and the commands: Arc 22.72.0 and later append the events first as one
|
|
15
|
+
batch, then run the commands in order, with no transaction across them (a retry can repeat both, so keep
|
|
16
|
+
both repeatable); the Stage scaffold pins Arc 22.68.0, whose command handler accepts a collection only when every element is a command, so a rendered app needs a proven dependency override to Arc 22.72.0 or later. Never split the reaction to dodge `STAGE-ESM-037`. A `Customizations/` file never makes a
|
|
13
17
|
rejected model renderable, and never claim a whole-application V5 from a subset. Choose the route
|
|
14
18
|
with `cratis-screenplay-render-and-gap-fill`.
|
|
15
19
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
A complete model: a result opens a work item, a reaction invokes a command, the command's fact
|
|
8
8
|
closes the item. It binds on Screenplay 4.66.0 (`executableReady: true`), standalone and through `cratis screenplay mcp`
|
|
9
|
-
3.28.2; `cratis render` 3.28.2
|
|
9
|
+
3.28.2; `cratis render` refuses the Automation slice (3.28.2: whole, `STAGE-ESM-016`; Stage 4.73.1: `STAGE-ESM-024`). The cratis 3.27.1 bundle (4.60.1)
|
|
10
10
|
rejected the Automation slice at binding with PLAY0268. Versions: `cratis-screenplay-toolchain` `references/versions.md`.
|
|
11
11
|
|
|
12
12
|
The first spec lists the whole cascade (`then` names every new fact: `CoursePassed`, and
|
|
@@ -190,10 +190,10 @@ module Certification
|
|
|
190
190
|
|
|
191
191
|
## Design-only additions
|
|
192
192
|
|
|
193
|
-
Two things a real queue often wants
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
193
|
+
Two things a real queue often wants stay out of the complete model above: a list query (the
|
|
194
|
+
visible queue) and a retry sweep that reads the whole view. The list query binds (Screenplay 4.105.0
|
|
195
|
+
or later; it was PLAY0268 at 4.66.0, and Stage refuses a snapshot list); the sweep needs a code body the
|
|
196
|
+
reference does not run, and durable per-item fan-out is outside the language (Screenplay#286). Say so
|
|
197
197
|
in the verdict.
|
|
198
198
|
|
|
199
199
|
```screenplay excerpt parent=assets/pending-certificates.play
|
|
@@ -205,7 +205,7 @@ query PendingCertificates => PendingCertificate[]
|
|
|
205
205
|
// Parent: the complete document above, slice Automation SendCertificates, after CertificateSender.
|
|
206
206
|
// The sweep reads the whole view (a clock trigger takes no `by`); iterating items needs code.
|
|
207
207
|
reaction CertificateRetrySweep
|
|
208
|
-
description "Retries items still pending; per-item fan-out needs code
|
|
208
|
+
description "Retries items still pending; per-item fan-out needs code (#286)"
|
|
209
209
|
every 15 minutes
|
|
210
210
|
reads PendingCertificate
|
|
211
211
|
file Reactions/RetryPendingCertificates.cs
|
|
@@ -4,7 +4,7 @@ A complete model: a webhook record from an outside proctoring service is capture
|
|
|
4
4
|
external fact in the provider's vocabulary, then translated by reactions into our facts. It
|
|
5
5
|
binds on Screenplay 4.66.0 (`executableReady: true`), standalone and through `cratis screenplay mcp`
|
|
6
6
|
3.28.2; the cratis 3.27.1 bundle (Screenplay 4.60.1) compiled it (V1) but rejected the Translate
|
|
7
|
-
slice at binding (PLAY0268). `cratis render` 3.28.2
|
|
7
|
+
slice at binding (PLAY0268). `cratis render` refuses it (3.28.2: whole, `STAGE-ESM-016`; Stage 4.73.1: `STAGE-ESM-024`).
|
|
8
8
|
|
|
9
9
|
Read the slice `description`: it is the per-field disposition (map, translate, ignore) and it
|
|
10
10
|
states what this example does not do. Examples never show the whole integration contract; use
|
|
@@ -36,16 +36,15 @@ decides, not the slice type:
|
|
|
36
36
|
`Translate` slices, reactions, declared triggers and captures bind, and the
|
|
37
37
|
reference runner executes them. Probed: the complete example below is
|
|
38
38
|
`executableReady` over `screenplay mcp`.
|
|
39
|
-
- **
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
as the contract: `cratis-screenplay-render-and-gap-fill`.
|
|
39
|
+
- **History:** the CLI 3.28.2 bundle (Screenplay 4.66.0) bound v6; the earlier 4.60.1 bundles
|
|
40
|
+
refused it and falsely reported PLAY0285 (`references/versions.md`).
|
|
41
|
+
- **Stage 4.73.1** admits ESM v1-v10 by version but renders no `Automation`, `Translate`, reaction or
|
|
42
|
+
capture (`STAGE-ESM-024`; `-037` for a reaction that produces and invokes, which Arc 22.72.0+
|
|
43
|
+
runs as one reactor; scaffold 22.68.0 needs override). The automation is gap-fill; the `.play` slice and its specifications
|
|
44
|
+
are the contract: `cratis-screenplay-render-and-gap-fill`.
|
|
46
45
|
|
|
47
46
|
Model them whenever the `.play` file is the deliverable, and say which tool bound
|
|
48
|
-
them
|
|
47
|
+
them (`cratis-screenplay-toolchain` `references/versions.md` for versions and messages).
|
|
49
48
|
Method (the four-part automation test, loops, translations versus automations):
|
|
50
49
|
`cratis-screenplay-automations-and-translations`.
|
|
51
50
|
|
|
@@ -75,8 +74,8 @@ Read [invocation identity](references/invocation-identity.md) for the checked
|
|
|
75
74
|
scenario, claim/unknown semantics and PLAY0647–0652/0557 diagnostics.
|
|
76
75
|
|
|
77
76
|
Historical CLI 3.41.0's 4.114.0 compiler rejected this source with PLAY0137.
|
|
78
|
-
Previous CLI 3.46.1 refused v10 (CLI-RENDER-004); CLI
|
|
79
|
-
|
|
77
|
+
Previous CLI 3.46.1 refused v10 (CLI-RENDER-004); the pinned CLI/Stage pair (toolchain
|
|
78
|
+
`references/versions.md`) reaches construct admission, still refusing identity (STAGE-ESM-034).
|
|
80
79
|
Target realization is gap-fill, using Arc `[ExecuteCommandsAsSystem]` for returned commands. Without that attribute
|
|
81
80
|
Arc supplies no principal and `[Authorize]`/`[Roles]` deny. Each invoked command
|
|
82
81
|
is atomic, not the whole cascade; earlier accepted facts remain after a later refusal.
|
|
@@ -123,7 +122,8 @@ Read [references/capture-map-and-example.md](references/capture-map-and-example.
|
|
|
123
122
|
`api` (`api`, `route`, `poll`), `webhook` (`path`) and `message` (`topic`).
|
|
124
123
|
⚠️ The grammar is **open** — the parser accepts any kind and any setting name as
|
|
125
124
|
free-form name/value pairs, so a typo is not caught. The three kinds are
|
|
126
|
-
convention, not enforcement.
|
|
125
|
+
convention, not enforcement. `source events` (`from <Event>` lines, ESM v9) is the exception, with
|
|
126
|
+
its own closed grammar (PLAY0610/0612/0616/0619/0620).
|
|
127
127
|
|
|
128
128
|
**`key <property>`** names the source property identifying an instance. From ESM v6
|
|
129
129
|
a capture without a `key` does not bind (`PLAY0268`). In a specification the
|
|
@@ -131,9 +131,9 @@ reference is handed records (`given capture`, `when capture`) and never contacts
|
|
|
131
131
|
`source`, which stays realization metadata; events append to the event source the
|
|
132
132
|
record's `key` names, and `$context.occurred` is the scenario's `given clock`.
|
|
133
133
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
`
|
|
134
|
+
An event's external origin is declared on the `event` itself with `event X from "<origin>"` (ESM v9);
|
|
135
|
+
outside records still enter through a `capture` in a `Translate` slice
|
|
136
|
+
(`cratis-screenplay-automations-and-translations` `references/public-events-and-direction.md`).
|
|
137
137
|
|
|
138
138
|
**`map`** reshapes properties before events are appended (rename, template, `translate`, `split`; mapping sources are `$.`, `$context.` and `$env.`); syntax is in the reference file linked above.
|
|
139
139
|
|
|
@@ -297,7 +297,8 @@ open. The type on a value is optional; a bare name is already a useful statement
|
|
|
297
297
|
the document declares → triggers registered with the compiler, plus the built-in
|
|
298
298
|
host signals. A registration wins over a built-in of the same name. Only when all
|
|
299
299
|
three miss is the name reported unknown — a **warning** (`PLAY0248`), because the
|
|
300
|
-
name may be known outside the document. A malformed reaction body is an error.
|
|
300
|
+
name may be known outside the document. A malformed reaction body is an error. If an event
|
|
301
|
+
and a trigger share a name, the event wins for value validation and binding.
|
|
301
302
|
|
|
302
303
|
**Built-in triggers:** `Startup` and `Shutdown`. The clock is built in too, but
|
|
303
304
|
with its own syntax rather than a name.
|
|
@@ -71,8 +71,8 @@ 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. CLI
|
|
75
|
-
|
|
74
|
+
returned PLAY0137, exit 5. This is not a current parser claim. The pinned CLI/Stage pair
|
|
75
|
+
(`cratis-screenplay-toolchain/references/versions.md`) reaches v10 construct admission, but
|
|
76
76
|
reaction identity still refuses STAGE-ESM-034. Previous CLI 3.46.1/Stage 4.52.0
|
|
77
77
|
audited through v7 only (`references/versions.md` in toolchain).
|
|
78
78
|
Clock/application-trigger identities have no Stage Arc realization either.
|
|
@@ -26,17 +26,14 @@ source is the single flow model.
|
|
|
26
26
|
|
|
27
27
|
## Verified product sources
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
| `Cratis.Screenplay` | main `fd18129` | Inline events, repairs and canonical `optional`; changed examples compiled |
|
|
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`) | Historical generated-value/response rule probes (ESM v7) |
|
|
35
|
-
| `Cratis.Screenplay` (historical check) | `4.127.0` | Identity and compliance guidance checked at this release: released `identity.md`, `context.md`, `concepts.md`, `purposes.md`, `events.md`, `diagnostics.md`; changed examples compiled |
|
|
29
|
+
Current pins: toolchain `references/versions.md`; the claims here were read at 4.139.0 and at
|
|
30
|
+
the older tags below (provenance). Compilation checks syntax and
|
|
31
|
+
model consistency, not reference execution.
|
|
36
32
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
- `4.31.0`: original examples and executable boundaries; main `fd18129`: inline events, repairs, canonical `optional`.
|
|
34
|
+
- `4.66.0` (`c89198b`): `handler`, code attachments, `persona` and compliance binding (`Semantics/SemanticModelBinder*.cs`, `Diagnostics/DiagnosticCodes.cs`).
|
|
35
|
+
- `4.68.0` (`79801bf`): generated-value/response rule probes (ESM v7).
|
|
36
|
+
- `4.127.0`: identity and compliance guidance (`identity.md`, `context.md`, `concepts.md`, `purposes.md`, `events.md`, `diagnostics.md`).
|
|
40
37
|
|
|
41
38
|
"Parses" and "runs" are different claims. The executable profile, and what
|
|
42
39
|
each construct binds to, is in the `cratis-screenplay-model-authoring` language
|
|
@@ -75,6 +72,10 @@ scalar/composite stream-id types and nested route mapping sources, including leg
|
|
|
75
72
|
markers. Keep a surrogate identity and carry protected data in the payload.
|
|
76
73
|
Chronicle likewise rejects `[PII]`/`[Encrypted]` identifiers (CHR0034/CHR0052).
|
|
77
74
|
|
|
75
|
+
Read [enum numbers](references/enum-numbers.md) for `draft = 1`, unique int32
|
|
76
|
+
all-or-none pins, stored/public identity safety, `enum-pinning`, ESM v12 and the
|
|
77
|
+
CLI/Stage gap. Unnumbered enums keep positions; specifications use names.
|
|
78
|
+
|
|
78
79
|
⚠️ **Enum trap.** A value literally named `validate` is read as an empty validate
|
|
79
80
|
block. Write `@validate` for the value; the compiler warns when it sees the
|
|
80
81
|
ambiguity.
|
|
@@ -169,7 +170,8 @@ When a rule depends on state:
|
|
|
169
170
|
- otherwise state the rule, and say in review that the target implementation
|
|
170
171
|
must enforce it consistently. Do not claim the model guarantees it.
|
|
171
172
|
|
|
172
|
-
Do not use `reads` to fetch data the caller could supply.
|
|
173
|
+
Do not use `reads` to fetch data the caller could supply. A composite-key view's `by` block is
|
|
174
|
+
`PLAY0268` (#599; read-surface `references/named-keys.md`).
|
|
173
175
|
|
|
174
176
|
## `validate`
|
|
175
177
|
|
|
@@ -238,7 +240,7 @@ choosing or omitting `for` on a production, or fixing `PLAY0469`-`PLAY0478`.
|
|
|
238
240
|
computed expressions parse but block binding (`PLAY0268`).
|
|
239
241
|
- **`for <identifier>`** on an indented line names the event source the event is
|
|
240
242
|
appended to. At most one per `produces`. To bind, it must name the command's
|
|
241
|
-
`identifier` property (`PLAY0273` otherwise); fanning out to another event
|
|
243
|
+
`identifier` property (`PLAY0273` otherwise; a `generated identifier` command, ESM v7, may name another required scalar property); fanning out to another event
|
|
242
244
|
source parses but does not run today.
|
|
243
245
|
- **`tag`** lines apply literal tags to this append. Tags also exist on the
|
|
244
246
|
`event` declaration, where they apply to every append of that type.
|
|
@@ -337,7 +339,8 @@ constraint OneRegistrationPerInvoice
|
|
|
337
339
|
hand-written Chronicle `IConstraint`, which can only declare uniqueness; it warns
|
|
338
340
|
(`PLAY0396`) and the executable model rejects it. A state transition rule
|
|
339
341
|
belongs in `validate`/`require`. Use a constraint when two concurrent appends must
|
|
340
|
-
not both win — a `validate` rule cannot do that.
|
|
342
|
+
not both win — a `validate` rule cannot do that. Stage renders only single-text-property and
|
|
343
|
+
`unique event` constraints (`STAGE-ESM-014`; `cratis-stage-rendering-and-sandbox` `references/admission.md`).
|
|
341
344
|
|
|
342
345
|
## `policy` and `persona`
|
|
343
346
|
|
|
@@ -368,8 +371,8 @@ Four contexts, and **what each omits is load-bearing** — when writing a code b
|
|
|
368
371
|
## Verify
|
|
369
372
|
|
|
370
373
|
- [ ] Validate the complete model root with warnings as errors; name the tool,
|
|
371
|
-
version and result.
|
|
372
|
-
compatibility and execution are separate checks.
|
|
374
|
+
version and result. Pins: toolchain `references/versions.md`;
|
|
375
|
+
bundle compatibility and execution are separate checks.
|
|
373
376
|
- [ ] No unintended `PLAY0478` or `PLAY0479` information remains.
|
|
374
377
|
- [ ] At most one command property carries `identifier`, and no event property does.
|
|
375
378
|
- [ ] Format rules live on the `concept`; state-dependent rules are specifications.
|
|
@@ -385,10 +388,8 @@ Four contexts, and **what each omits is load-bearing** — when writing a code b
|
|
|
385
388
|
runnable or renderable without saying which tool admits it.
|
|
386
389
|
- [ ] No event carries an optional property covering two situations.
|
|
387
390
|
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
Versions, tool capabilities and the executable and renderable subsets: `cratis-screenplay-toolchain` (`references/versions.md`). Where a construct sits in the
|
|
391
|
-
method: `cratis-screenplay-modeling-lifecycle` and `cratis-screenplay-slice-design`.
|
|
391
|
+
Compiler pins and admission: `cratis-screenplay-toolchain/references/versions.md`.
|
|
392
|
+
Method: `cratis-screenplay-modeling-lifecycle` and `cratis-screenplay-slice-design`.
|
|
392
393
|
|
|
393
394
|
## Route near misses
|
|
394
395
|
|
|
@@ -70,7 +70,9 @@ Reverse generation is not the C# provider mapping above. Source authority: Arc
|
|
|
70
70
|
`v22.70.0:Documentation/backend/csharp/generating-a-screenplay.md` (Operational
|
|
71
71
|
secrets), `Source/DotNET/Screenplay/Emission/Concepts/ConceptSyntaxBuilder.cs`
|
|
72
72
|
and `Source/DotNET/Screenplay/Analysis/Types/PersonalDataMarkings.cs`.
|
|
73
|
-
|
|
73
|
+
SP0058 to SP0060 exist from Arc.Screenplay 22.61.0 (or earlier); SP0061 to SP0063 first ship in 22.70.0 (read at
|
|
74
|
+
v22.70.0 and v22.72.0), so the full set described here needs 22.70.0 or later. CLI 3.53.1 bundles 22.54.0, which has
|
|
75
|
+
none of SP0061 to SP0063, so the CLI shows none of them; check the generator package actually loaded.
|
|
74
76
|
|
|
75
77
|
- Both `[Encrypted]` and `[NotAudited]` must be on the concept to recover
|
|
76
78
|
`secret`. Partial or member-specific markings report SP0058 (Information),
|
|
@@ -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
|
|
108
|
+
they are not current parser claims; compiler pins are in toolchain `references/versions.md`. 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
|
|
@@ -0,0 +1,93 @@
|
|
|
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
|
+
# Explicit enum member numbers
|
|
5
|
+
|
|
6
|
+
Authoring shipped in Screenplay 4.137.0; non-positional executable numbers shipped
|
|
7
|
+
in 4.139.0 as ESM v12 (decision 0065). The model owns member identity, not the renderer.
|
|
8
|
+
|
|
9
|
+
```screenplay
|
|
10
|
+
domain EnumNumbers
|
|
11
|
+
|
|
12
|
+
concept InvoiceId : Uuid
|
|
13
|
+
concept InvoiceStatus : Enum
|
|
14
|
+
draft = 1
|
|
15
|
+
sent = 4
|
|
16
|
+
cancelled = -1
|
|
17
|
+
|
|
18
|
+
module Invoicing
|
|
19
|
+
feature Issuing
|
|
20
|
+
slice StateChange SendingInvoice
|
|
21
|
+
command SendInvoice
|
|
22
|
+
invoiceId InvoiceId identifier
|
|
23
|
+
status InvoiceStatus
|
|
24
|
+
produces InvoiceSent
|
|
25
|
+
for invoiceId
|
|
26
|
+
status = status
|
|
27
|
+
event InvoiceSent
|
|
28
|
+
status InvoiceStatus
|
|
29
|
+
specification Sending
|
|
30
|
+
when SendInvoice
|
|
31
|
+
invoiceId = "6f9619ff-8b86-d011-b42d-00c04fc964ff"
|
|
32
|
+
status = "sent"
|
|
33
|
+
then InvoiceSent
|
|
34
|
+
for "6f9619ff-8b86-d011-b42d-00c04fc964ff"
|
|
35
|
+
status = "sent"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Source rules
|
|
39
|
+
|
|
40
|
+
- Number **all members or none**; there is no implicit continuation after a pin.
|
|
41
|
+
- Numbers are unique whole int32 values, from -2147483648 through 2147483647.
|
|
42
|
+
Gaps and negative numbers are allowed; aliases and flags semantics are not.
|
|
43
|
+
- Write decimal digits with an optional minus sign: no leading zeros, fraction,
|
|
44
|
+
exponent or plus sign. `-0` prints canonically as `0`.
|
|
45
|
+
- Escape a keyword member as usual, for example `@validate = 7`.
|
|
46
|
+
- Unnumbered enums retain zero-based positional meaning. Descriptions and
|
|
47
|
+
validation blocks still work. Specifications, fixtures, validation operands
|
|
48
|
+
and conditions use **member names**, never their numbers.
|
|
49
|
+
|
|
50
|
+
PLAY0667 reports mixed numbering, PLAY0668 duplicate numbers, PLAY0669 an
|
|
51
|
+
out-of-int32 value and PLAY0670 malformed number syntax. None has an automatic
|
|
52
|
+
repair: correcting a stored identity needs an author decision.
|
|
53
|
+
|
|
54
|
+
## When to pin
|
|
55
|
+
|
|
56
|
+
Pin enums used in persisted events or a stable public contract, or when retaining
|
|
57
|
+
numbers extracted from an existing system. Before reordering, inserting or removing
|
|
58
|
+
members, establish the **stored** numbers first; numbering an already reordered list
|
|
59
|
+
would preserve the wrong meaning. Never renumber a published member or reuse its
|
|
60
|
+
number for another meaning. Pinning does not prove old readers accept a removed member.
|
|
61
|
+
|
|
62
|
+
A short-lived enum used only by command inputs or views may remain positional.
|
|
63
|
+
Ordinary compilation does not demand pins. Opt into `--check enum-pinning`
|
|
64
|
+
(or `PLAY0671` or `all`) for an Information hint on wholly unnumbered enums used
|
|
65
|
+
by event properties, including through composite types. MCP `diagnostics` uses
|
|
66
|
+
`checks: "enum-pinning"`. The hint suggests `propose-number-enum-members`, which
|
|
67
|
+
pins current positions; it is a refactoring, not a correctness repair. Read
|
|
68
|
+
model-authoring `references/mcp-tools.md` for the revision-checked proposal loop.
|
|
69
|
+
|
|
70
|
+
## Executable contract and consumer boundary
|
|
71
|
+
|
|
72
|
+
ESM v12 adds an optional canonical **last** `numbers` array parallel to `values`.
|
|
73
|
+
For the concept above, `values` is `["draft", "sent", "cancelled"]` and `numbers`
|
|
74
|
+
is `[1, 4, -1]`. Non-positional numbers select v12. Pins equal to `0..n-1` are
|
|
75
|
+
retained in source/AST but omitted from ESM, preserving the previous executable
|
|
76
|
+
version, bytes and revision; unnumbered enums also preserve their old bytes.
|
|
77
|
+
|
|
78
|
+
Strict reading rejects `numbers` in older versions, without enum values, with a
|
|
79
|
+
length mismatch, duplicates, non-int32 entries or a positional array (non-canonical).
|
|
80
|
+
Programmatic validation enforces the same contract. Specifications still compare
|
|
81
|
+
names; numbers are neither alternative fixture values nor flags.
|
|
82
|
+
|
|
83
|
+
Consumers must **explicitly admit v12**. CLI 3.53.1 and Stage 4.73.1 both bundle
|
|
84
|
+
Screenplay 4.137.0: `cratis render`/Stage do not admit v12 yet. A model with
|
|
85
|
+
non-positional numbers compiles and binds with standalone Screenplay >= 4.139.0,
|
|
86
|
+
but does not render through that CLI. Do not remove its pins to pass rendering;
|
|
87
|
+
report the consumer gap. See toolchain `references/versions.md`.
|
|
88
|
+
|
|
89
|
+
Sources checked at `v4.139.0`: `Documentation/screenplay/concepts.md`,
|
|
90
|
+
`interoperability.md`, `diagnostics.md`, `mcp/authoring-tools.md`, decision 0065,
|
|
91
|
+
`Semantics/Versions.cs`, `SemanticModelValidator.EnumMemberNumbers.cs` and the
|
|
92
|
+
source-backed `EnumMemberNumbersCorpus.V12` (under `Source/DotNET/`). Consumer
|
|
93
|
+
pins: CLI `v3.53.1:Directory.Packages.props`, Stage `v4.73.1:Directory.Packages.props`.
|
|
@@ -1,11 +1,10 @@
|
|
|
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
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
generated-value and response refusals STAGE-ESM-028/029. Do not turn this into a blanket compiler
|
|
4
|
+
as ESM v7 (checked at 4.68.0). Current pins:
|
|
5
|
+
`cratis-screenplay-toolchain/references/versions.md`. CLI#261 is closed: CLI now admits v7
|
|
6
|
+
to Stage planning, and the 4.137.0 compiler in CLI 3.53.1 binds it. Stage 4.73.1 still refuses
|
|
7
|
+
generated values and responses with STAGE-ESM-028/029 (Stage#175), as the historical CLI 3.41.0 corpus did. Do not turn this into a blanket compiler
|
|
9
8
|
refusal or promise a render from binding alone. Preserve the contract for gap-fill
|
|
10
9
|
where admission refuses. Historical rules below were read at 4.68.0. Complete compiled example:
|
|
11
10
|
`cratis-screenplay-toolchain` `references/generated-responses-example.md`.
|
|
@@ -45,7 +44,7 @@ Rules (all read at `v4.68.0`):
|
|
|
45
44
|
|
|
46
45
|
Operations remain authorable/unadmitted (PLAY0268). Named event sources,
|
|
47
46
|
streams and command/specification routes instead bind and reference-execute as
|
|
48
|
-
ESM v8 at 4.125.0; CLI
|
|
47
|
+
ESM v8 at 4.125.0; the pinned CLI (toolchain `references/versions.md`) reaches Stage admission through v10,
|
|
49
48
|
not blanket target support. Syntax/MCP acceptance alone is not execution. Source/stream
|
|
50
49
|
forms and realization boundary: `cratis-screenplay-toolchain`
|
|
51
50
|
`references/sources-and-streams.md`. Do not infer further syntax or provider
|
package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md
CHANGED
|
@@ -32,5 +32,7 @@ A bodied rule or fenced block on a validation, rule or policy binds as opaque co
|
|
|
32
32
|
implementation. Two exceptions never bind: the command `handler`, and a `file`
|
|
33
33
|
constraint (the binder records the requirement, then rejects it with `PLAY0268`;
|
|
34
34
|
only `unique` constraints bind).
|
|
35
|
-
Stage 4.
|
|
36
|
-
|
|
35
|
+
Stage 4.73.1 renders pure reducer transitions and opaque policy bodies, but refuses command and
|
|
36
|
+
concept code validations and rule predicates (STAGE-ESM-005): those are gap-fill code. Prefer a
|
|
37
|
+
declarative rule when one can say it. What binds and what the executable model rejects (Date and
|
|
38
|
+
DateTime comparisons, nested-path rules): `cratis-screenplay-toolchain` `references/executable-subset.md`.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
Copyright (c) Cratis. All rights reserved.
|
|
2
|
+
Licensed under the MIT license. See LICENSE file in the canonical Cratis/AI repository for the full license text.
|
|
3
|
+
|
|
4
|
+
## Third-party notices
|
|
5
|
+
|
|
6
|
+
This skill adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
|
|
7
|
+
(https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
|
|
8
|
+
https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
|
|
9
|
+
material remains credited to Martin Dilger and Nebulit GmbH.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cratis-screenplay-delivery-planning
|
|
3
|
+
description: "Plan and estimate the delivery of an accepted Screenplay model by slices: count slices by type (StateChange, StateView, Automation, Translate), derive the slice dependency table from the model, split work in parallel along event contracts, track slice groups as GitHub issues with a closed status vocabulary, and turn the team's own completed-slice history into ranged estimates, capacity math and retrospective metrics. Use when asked how long a modeled scope will take, how to split it across people or agents, what to build first, or how to track and re-plan delivery. Not for: deciding what to model (use `cratis-screenplay-event-modeling`), rendering or gap-filling a slice (use `cratis-screenplay-render-and-gap-fill`), or reviewing the model (use `cratis-screenplay-model-review`)."
|
|
4
|
+
license: MIT
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Delivery planning
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
Turn an accepted `.play` model into a delivery plan: how many slices of which type, in which
|
|
11
|
+
order, who can work in parallel, what each group costs, and when it is done. The model already
|
|
12
|
+
cuts the work into slices and names the events between them, so the plan counts and orders
|
|
13
|
+
those slices instead of guessing at features.
|
|
14
|
+
|
|
15
|
+
Planning does not replace modeling, review or the render and gap-fill gates. A plan is a
|
|
16
|
+
working note, not a contract: when the model changes, recount; when a slice is not accepted,
|
|
17
|
+
it is not planned work yet.
|
|
18
|
+
|
|
19
|
+
## Ground rules
|
|
20
|
+
- **Count slices, not features.** The unit is one slice of one type
|
|
21
|
+
(`StateChange`, `StateView`, `Automation`, `Translate`). Method and weights:
|
|
22
|
+
`references/slice-counting.md`.
|
|
23
|
+
- **Estimates are ranges from the team's own history.** State the basis (which completed slices,
|
|
24
|
+
how many, how long). With no history the estimate is a *first estimate without history*:
|
|
25
|
+
say so, give a wide range, and replace it as soon as slices complete. Never quote an accuracy
|
|
26
|
+
figure or a duration you cannot trace to a count and a rate.
|
|
27
|
+
- **Events are the contract.** Slice B depends on slice A because B needs an event or view A
|
|
28
|
+
produces. Anyone can build B against the events A will produce, with synthetic `given`
|
|
29
|
+
events, before A is finished. Dependencies are read from the model, not remembered.
|
|
30
|
+
- **Render is not free of effort, and gap-fill is not free of risk.** Stage renders
|
|
31
|
+
`StateChange` and `StateView`; `Automation` and `Translate` are hand-written against the
|
|
32
|
+
model as contract. Check admission per slice with `cratis-screenplay-render-and-gap-fill`
|
|
33
|
+
(version pins: `cratis-screenplay-toolchain` `references/versions.md`) before pricing a slice as
|
|
34
|
+
rendered.
|
|
35
|
+
- **Plans live in `.ai-work/`; tracking lives in GitHub issues** where the repository works
|
|
36
|
+
that way. Never put a plan in the model, in `.cratis/`, or in a documentation folder.
|
|
37
|
+
|
|
38
|
+
## Procedure
|
|
39
|
+
1. **Confirm the scope is accepted.** Only slices of a committed model under the root count
|
|
40
|
+
as planned delivery. Drafts and open questions are listed separately as unplanned. If the
|
|
41
|
+
model is still moving, plan only the stable modules and say what is excluded.
|
|
42
|
+
2. **Inventory the slices.** Use the Screenplay MCP: `describe-application` for counts and
|
|
43
|
+
paged children, `dependency-graph` at slice level for edges, cycles and an advisory
|
|
44
|
+
order, `dependencies` and `find-references` per slice for the contracts it consumes and
|
|
45
|
+
produces and for the `invokes`, action and form edges the graph does not order (`reads` maps to `decidesFrom`, which it does order, but it stays a coordination point). Treat `complete: false` or an ambiguous binding as unknown, never as no
|
|
46
|
+
dependency (`cratis-screenplay-model-authoring`). Without the MCP, read the `.play` files.
|
|
47
|
+
3. **Classify each slice** by type and by realization: rendered (Stage admits it) or
|
|
48
|
+
hand-written (gap-fill, adapter, external call). Record the reason for each hand-written one.
|
|
49
|
+
4. **Build the dependency table** (`references/parallel-delivery.md`): per slice, the events
|
|
50
|
+
it consumes, who produces each, and the slices it waits on. A cycle means a feedback loop:
|
|
51
|
+
return it to slice design (usually an Automation slice); never schedule around it.
|
|
52
|
+
5. **Group into waves.** Slices with no unmet producers form wave 1; each next wave needs
|
|
53
|
+
only earlier waves. Within a wave, slices are independent and can run in parallel. Group
|
|
54
|
+
slices that share one view or one stream into one slice group (one issue).
|
|
55
|
+
6. **Weigh and estimate** (`references/velocity-and-capacity.md`): apply the team's weights per
|
|
56
|
+
type and realization, divide by measured throughput, and report a range with its basis. Add
|
|
57
|
+
separate lines for what is not slice work: modeling and review gates, integration with
|
|
58
|
+
outside systems, environment and deployment, specifications that need new infrastructure.
|
|
59
|
+
7. **Track.** One GitHub issue per slice group, in the repository's own issue practice
|
|
60
|
+
(assign the issue, keep an in-progress status in the issue body, check for an existing claim
|
|
61
|
+
before starting): the status block lists the slices, their
|
|
62
|
+
type, the wave, the blockers and each slice's planning status below. The issue's own state
|
|
63
|
+
follows the repository's hygiene (in progress, in review when the PR opens, paused, blocked,
|
|
64
|
+
done only when delivered). Keep the working plan in
|
|
65
|
+
`.ai-work/<task>/delivery-plan.md`.
|
|
66
|
+
8. **Re-plan after each completed group.** Update throughput, recount if the model changed,
|
|
67
|
+
restate the range. Record the retrospective metrics from `references/velocity-and-capacity.md`.
|
|
68
|
+
|
|
69
|
+
## Status vocabulary
|
|
70
|
+
Per-slice planning status, a closed set recorded inside the plan and the issue's status block.
|
|
71
|
+
It is not the issue's state: the enclosing issue keeps the repository's own states (for example
|
|
72
|
+
in progress, in review, paused, blocked, done), and is done only when its slices are
|
|
73
|
+
delivered (merged and released where the repository releases).
|
|
74
|
+
|
|
75
|
+
| Status | Meaning |
|
|
76
|
+
|---|---|
|
|
77
|
+
| todo | accepted in the model, not started |
|
|
78
|
+
| in progress | one owner is working on it |
|
|
79
|
+
| blocked | waiting on a named producer, decision or external party; say which |
|
|
80
|
+
| done | built, its specifications pass, and the slice conforms to the model |
|
|
81
|
+
|
|
82
|
+
Before claiming a slice, check its current status. If it is already `in progress`, someone else
|
|
83
|
+
holds it: pick another slice, do not take it over and do not report an error. Move a status only
|
|
84
|
+
to a different value; a repeated update is a signal that another worker got there first.
|
|
85
|
+
Check for an existing claim (assignee and in-progress status) before starting; where the harness
|
|
86
|
+
provides a claim tool such as `issue_work`, its claim step is that guard.
|
|
87
|
+
|
|
88
|
+
## What a plan states
|
|
89
|
+
- Scope: the modules and slices counted, and what was excluded and why.
|
|
90
|
+
- Slice counts by type, split into rendered and hand-written.
|
|
91
|
+
- The dependency table and the waves.
|
|
92
|
+
- The estimate as a range with its basis, or "first estimate without history".
|
|
93
|
+
- Capacity assumptions: who or what works in parallel, and the constraints on it.
|
|
94
|
+
- Risks that move the range: hand-written slices, outside systems, open questions, a model
|
|
95
|
+
likely to change.
|
|
96
|
+
|
|
97
|
+
## Limits
|
|
98
|
+
- A rate from one project or one person does not transfer to another team or another kind of
|
|
99
|
+
slice; say when the sample is small or mixed.
|
|
100
|
+
- Counting hides unusually large slices. A slice that needed a design discussion is two slices
|
|
101
|
+
or a modeling question; recount rather than weigh it as "big".
|
|
102
|
+
- Parallel work only pays when slices are truly independent in the dependency table and
|
|
103
|
+
integration of the shared events is owned. Shared writes to one file, one stream or one
|
|
104
|
+
external system serialize the work.
|
|
105
|
+
|
|
106
|
+
## References
|
|
107
|
+
- `references/slice-counting.md` - types, realization, weights, what to count and exclude.
|
|
108
|
+
Read when counting or classifying slices.
|
|
109
|
+
- `references/velocity-and-capacity.md` - measuring throughput, ranges, capacity math,
|
|
110
|
+
retrospective metrics. Read when producing or updating an estimate.
|
|
111
|
+
- `references/parallel-delivery.md` - dependency table, waves, event contracts, issue
|
|
112
|
+
grouping. Read when splitting work across people or agents.
|
|
113
|
+
- `references/provenance.md` - sources and what was not adopted.
|
|
114
|
+
|
|
115
|
+
## Related skills
|
|
116
|
+
`cratis-screenplay-slice-design` (slice dependencies), `cratis-screenplay-model-authoring`
|
|
117
|
+
(MCP navigation), `cratis-screenplay-render-and-gap-fill` (what renders, gap-fill handoff),
|
|
118
|
+
`cratis-screenplay-modeling-lifecycle` (phases and gates).
|