@cratis/pi 7.33.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 +14 -9
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +5 -5
- 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 +2 -3
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/public-events-and-direction.md +1 -2
- 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 +14 -13
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +12 -13
- package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +3 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +2 -2
- 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 +28 -28
- 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 +12 -9
- 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/references/language-reference.md +2 -2
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +3 -3
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +3 -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 +58 -46
- 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 +22 -4
- 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 +8 -7
- 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 +6 -4
- package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +2 -1
- 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 +9 -9
- 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 +1 -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/streams-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +14 -12
- 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 +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +3 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +24 -16
- package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +41 -12
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +5 -5
- package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +14 -9
- package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +9 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +4 -1
- 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 +39 -14
- 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 +83 -74
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +62 -12
- 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 +8 -3
- package/package/profile-catalog.json +1 -0
- package/package.json +1 -1
package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md
CHANGED
|
@@ -53,8 +53,9 @@ module Collections
|
|
|
53
53
|
- A reached reaction with a code body (`file` or inline) returns unsupported, as
|
|
54
54
|
does a reaction that never settles. The reference stops at 1,000 new facts per
|
|
55
55
|
scenario and 10,000 due occurrences per clock advance.
|
|
56
|
-
- A model that uses these forms selects ESM v6 (`schemaVersion: 6`). Stage 4.
|
|
57
|
-
admits ESM v1-
|
|
56
|
+
- A model that uses these forms selects ESM v6 (`schemaVersion: 6`). Stage 4.73.1
|
|
57
|
+
admits ESM v1-v10 by version but renders no `Automation` or `Translate` slice and no reaction
|
|
58
|
+
(`STAGE-ESM-024`; `-034` runsAs, `-035` filters, `-037` mixed effects), so the whole
|
|
58
59
|
automation is gap-fill against this contract: `cratis-screenplay-render-and-gap-fill`.
|
|
59
60
|
|
|
60
61
|
### Version skew: cascades and the false `PLAY0285` (cratis before 3.28.2)
|
|
@@ -34,5 +34,5 @@ SOFTWARE.
|
|
|
34
34
|
|
|
35
35
|
This skill also adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
|
|
36
36
|
(https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
|
|
37
|
-
https://nebulit.de), used with the
|
|
38
|
-
|
|
37
|
+
https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
|
|
38
|
+
material remains credited to Martin Dilger and Nebulit GmbH.
|
|
@@ -12,7 +12,7 @@ which it only records, and what a retry, a race or a replay does. Grammar lives
|
|
|
12
12
|
skills; this skill owns the decisions. The `.play` model is the source of truth: a rule that
|
|
13
13
|
lives only in code, or only in a description, is a finding, not a solution.
|
|
14
14
|
|
|
15
|
-
**First append into a scope (Chronicle v19.
|
|
15
|
+
**First append into a scope (Chronicle v19.50.0, version-qualified).** The default optimistic
|
|
16
16
|
strategy compares the scope's tail sequence number. When nothing matches the scope yet (the
|
|
17
17
|
first event on a new event source, or the first event of a new source type, stream type or
|
|
18
18
|
stream id), there is no tail and the append is **not checked**: two writers opening the same
|
|
@@ -28,17 +28,17 @@ Require target evidence that the check ran: a concurrent first-append scenario a
|
|
|
28
28
|
Chronicle, asserting one append wins, one is rejected, and `IAppendResult.ConcurrencyCheckPerformed`
|
|
29
29
|
is `true` (a skipped check and a passing one look identical otherwise; a current client against
|
|
30
30
|
an older kernel always reads `false`). This was source- and documentation-inspected, not
|
|
31
|
-
concurrency-tested here. The
|
|
32
|
-
and Arc 22.
|
|
31
|
+
concurrency-tested here. The Stage 4.73.1 scaffold pins Chronicle client/kernel 19.45.0
|
|
32
|
+
and Arc 22.68.0 (the CLI bundle's Chronicle is 19.32.0); the APIs exist for gap-fill, not as automatically rendered enforcement.
|
|
33
33
|
|
|
34
34
|
## Verified product sources
|
|
35
35
|
|
|
36
36
|
| Product | Pin | Used for |
|
|
37
37
|
| --- | --- | --- |
|
|
38
38
|
| Screenplay | v4.68.0 (`79801bf`) | ESM v7 generated values (`generated identifier`, decision 0026) and decision 0025's numbering; the diagnostics below were read at v4.66.0 (`c89198b`): `identifier`, `for`, constraints, generations, `id` pins, diagnostics PLAY0019/0135/0268/0271/0273/0391-0393/0446-0449/0469/0471 |
|
|
39
|
-
| Chronicle | v19.32.0
|
|
40
|
-
| Arc | v22.
|
|
41
|
-
| Stage
|
|
39
|
+
| Chronicle | v19.50.0 (read; first read at v19.32.0 `f17a2ff`) | CHR0012, CHR0034; open defects #3744, #4123, #4131 (still open) |
|
|
40
|
+
| Arc | v22.72.0 | `[ProtectedDecision]` and `DecisionRead<T>` (since v22.39.0) |
|
|
41
|
+
| Stage | v4.73.1 | rendered apps pin Arc 22.68.0 and Chronicle client/kernel 19.45.0; protected-read APIs available to gap-fill. Historical 4.24.2 admission probe: ESM v4, evolved events refused with `STAGE-ESM-026` |
|
|
42
42
|
|
|
43
43
|
Full pin table: `references/versions.md` in `cratis-screenplay-toolchain`. Re-check the three
|
|
44
44
|
Chronicle issues before relying on a constraint in a later release.
|
|
@@ -90,7 +90,7 @@ option, mark it `ASSUMED` in the slice or module `documentation` and in the sess
|
|
|
90
90
|
command/specification routes bind and reference-execute as ESM v8 on 4.125.0.
|
|
91
91
|
The pinned CLI (toolchain `references/versions.md`) reaches Stage construct checks through v10; keep the routing
|
|
92
92
|
contract when target admission requires gap-fill. Forms/boundaries:
|
|
93
|
-
toolchain `references/sources-and-streams.md`. A `generated identifier` (ESM v7, standalone 4.68.0;
|
|
93
|
+
toolchain `references/sources-and-streams.md`. A `generated identifier` (ESM v7, standalone 4.68.0 and later; Stage 4.73.1 refuses it, STAGE-ESM-028) is
|
|
94
94
|
generated fresh on every acceptance: it is not a retry identity, and generated values give no
|
|
95
95
|
idempotency, retry or deduplication guarantee. When a retry must find the same stream, the caller
|
|
96
96
|
supplies the identifier before the first attempt.
|
|
@@ -166,10 +166,10 @@ option, mark it `ASSUMED` in the slice or module `documentation` and in the sess
|
|
|
166
166
|
complete named mappings and canonical comparison, not guessed legacy splits.
|
|
167
167
|
Stored key-schema changes require a new stream identity or migration; see
|
|
168
168
|
toolchain `references/sources-and-streams.md`.
|
|
169
|
-
- Chronicle (open at v19.
|
|
169
|
+
- Chronicle (open at v19.50.0): the SQL and InMemory providers do not settle unique claims
|
|
170
170
|
(#3744); index updates run after commit and may fail silently (#4123); composite values can
|
|
171
171
|
collide on the separator (#4131). A declared constraint is a declaration, not a runtime test.
|
|
172
|
-
- `[ProtectedDecision]` is available in Arc v22.39.0 or later, including Stage 4.
|
|
172
|
+
- `[ProtectedDecision]` is available in Arc v22.39.0 or later, including Stage 4.73.1's
|
|
173
173
|
rendered package set. It is not emitted protection: gap-fill must enroll an admitted
|
|
174
174
|
decision read, or redesign the stream/identity when the shape is refused
|
|
175
175
|
(`references/consistency-and-concurrency.md`, section 3).
|
package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
## Contents
|
|
4
4
|
|
|
5
5
|
- Establish the boundary, not an organizational formula
|
|
6
|
+
- Ownership by design (optional lens)
|
|
6
7
|
- Ownership interview
|
|
7
8
|
- Ownership and interface inventory
|
|
8
9
|
- Cross-boundary walkthrough
|
|
@@ -29,6 +30,28 @@ decision visible in the session `STATE.md`; never report independence as establi
|
|
|
29
30
|
splitting a boundary revisit every invariant that needs information from both sides: an event
|
|
30
31
|
exchange does not make that decision atomic.
|
|
31
32
|
|
|
33
|
+
## Ownership by design (optional lens)
|
|
34
|
+
Conway's observation is that systems come to mirror the teams that build them. Use it as a
|
|
35
|
+
deliberate lens when you shape boundaries, not as a law: decide the ownership you want and let the
|
|
36
|
+
boundaries follow it, instead of discovering later that the org chart set them.
|
|
37
|
+
|
|
38
|
+
- When one team will own a boundary end to end, treat the module as that team's system: it owns
|
|
39
|
+
its commands, the events it produces, the read models it maintains and the systems it calls.
|
|
40
|
+
Other teams interact only through its public events and its capture contracts, so each side can
|
|
41
|
+
be built, scaled and released on its own, coordinating through events rather than meetings.
|
|
42
|
+
- A system this process integrates with is, by definition, owned by someone else. Record that
|
|
43
|
+
owner next to the public fact or capture contract; it is the person you ask before changing it.
|
|
44
|
+
- Treat "team = system" as a hypothesis to test with the interview answers, not as a default. One
|
|
45
|
+
team may own several modules, a module may be shared during a transition, and a team boundary
|
|
46
|
+
does not make a decision atomic across it (see above). Write down which the model follows.
|
|
47
|
+
|
|
48
|
+
**Indirect producers.** When a fact reaches a receiver through an intermediate boundary (the
|
|
49
|
+
booking system's `BerthBooked` drives billing, whose `StayInvoiceDue` then reaches the harbour
|
|
50
|
+
office), attribute each public event to the boundary that decides it, and name the original
|
|
51
|
+
producer in the consumer's description as the indirect source. Ownership of the public contract
|
|
52
|
+
stays with the boundary that decides the fact; the indirect source tells a reader whom a change
|
|
53
|
+
upstream will surprise.
|
|
54
|
+
|
|
32
55
|
## Ownership interview
|
|
33
56
|
Run it when ownership, autonomy or integration decisions are missing; skip it when the user or
|
|
34
57
|
the model already states all three. Ask one question at a time, offer the options, and follow
|
|
@@ -136,14 +159,19 @@ integration support.
|
|
|
136
159
|
internal step.
|
|
137
160
|
- Treat a public event like a published API: evolution follows `evolution.md` with the
|
|
138
161
|
consumers named, and breaking changes become new events.
|
|
139
|
-
-
|
|
140
|
-
|
|
162
|
+
- Events are private by default. Mark a public contract with `public event X` (ESM v9, released in
|
|
163
|
+
Screenplay 4.117.0); declare a foreign public event's shape locally with `event X from "store"`.
|
|
164
|
+
A command never produces a public event (PLAY0607/0613); crossing the boundary is a `Translate`
|
|
165
|
+
slice with an explicit direction (`cratis-screenplay-automations-and-translations`
|
|
166
|
+
`references/public-events-and-direction.md`). Nothing checks that the foreign shape matches the
|
|
167
|
+
other store, so also name the consumers in the event's `documentation` and keep the list in
|
|
168
|
+
`STATE.md`. Stage 4.73.1 refuses public events (`STAGE-ESM-032`).
|
|
141
169
|
|
|
142
170
|
## Crossing a boundary in Screenplay
|
|
143
171
|
| Situation | Construct |
|
|
144
172
|
|---|---|
|
|
145
173
|
| another module in the same application | reference the event by name (cross-module resolution works within one application) |
|
|
146
|
-
| another bounded context's contract | unquoted `import Context.Event`
|
|
174
|
+
| another bounded context's contract | `event X from "store"` (shape declared locally, ESM v9); an unquoted `import Context.Event` or `import Q.X from "store"` has no local shape and stays PLAY0268 (see `versions.md` in `cratis-screenplay-toolchain`) |
|
|
147
175
|
| my own files | quoted `import "glob"` |
|
|
148
176
|
| outside data entering | `Translate` slice: `capture`, or a translator `reaction` over an imported event (`cratis-screenplay-automations-and-translations`) |
|
|
149
177
|
| our fact another context needs | a public summary event; the other side translates it into its own language |
|
|
@@ -5,16 +5,16 @@ target facts; the `.play` model declares only part of them (`versions.md` in
|
|
|
5
5
|
`cratis-screenplay-toolchain`).
|
|
6
6
|
|
|
7
7
|
## Pins
|
|
8
|
-
Chronicle **v19.
|
|
9
|
-
event-source id) are present. Three runtime defects are **open at v19.
|
|
8
|
+
Chronicle **v19.50.0** (first read at v19.32.0 `f17a2ff`): CHR0012 (nullable event properties) and CHR0034 (PII on an
|
|
9
|
+
event-source id) are present. Three runtime defects are **open at v19.50.0**: #3744 (SQL and
|
|
10
10
|
InMemory providers do not settle unique claims), #4123 (constraint index updates run after commit
|
|
11
11
|
and fail silently) and #4131 (composite unique constraints collide when a component contains the
|
|
12
|
-
separator). Arc **v22.
|
|
13
|
-
later); Stage 4.
|
|
14
|
-
19.
|
|
12
|
+
separator). Arc **v22.72.0** has `[ProtectedDecision]` (since v22.39.0, needs Chronicle 19.23 or
|
|
13
|
+
later); Stage 4.73.1 rendered apps pin Arc 22.68.0 and Chronicle client/kernel
|
|
14
|
+
19.45.0, so the APIs are available to gap-fill, not automatically emitted or
|
|
15
15
|
protected (see `consistency-and-concurrency.md` section 3). Re-check the issues before relying on a
|
|
16
16
|
constraint in a new release.
|
|
17
|
-
A concurrency scope's first append is unchecked by default at v19.
|
|
17
|
+
A concurrency scope's first append is unchecked by default at v19.50.0 (the default is planned to become checked in the next major, `Documentation/events/concurrency.mdx`); see
|
|
18
18
|
SKILL.md, ‘First append into a scope’.
|
|
19
19
|
|
|
20
20
|
## Identity, routing and claims
|
|
@@ -64,7 +64,7 @@ observed legacy check from verified atomic protection.
|
|
|
64
64
|
Never accept the caller's copy of the state: `currentStatus Status` on the command with
|
|
65
65
|
`require currentStatus == "approved"` protects nothing, and neither does a boolean attestation
|
|
66
66
|
input (`confirmsX == true`) standing in for the rule. Never move the rule into `handler` or
|
|
67
|
-
`implementation hint` prose; a description
|
|
67
|
+
`implementation hint` prose; a description renders only as an XML doc comment (Stage#178), so prose alone leaves
|
|
68
68
|
the rule unenforced in rendered scope.
|
|
69
69
|
|
|
70
70
|
Right: write the rule as stated intent and mark it unenforced.
|
|
@@ -74,7 +74,7 @@ Right: write the rule as stated intent and mark it unenforced.
|
|
|
74
74
|
- Slice `description`: one short marker per rule, `NOT enforced in the model today; target: <mechanism>`.
|
|
75
75
|
- Slice fenced `documentation`, one block per rule:
|
|
76
76
|
- Requirement: the business rule in business words.
|
|
77
|
-
- Status: NOT enforced in the model today (Screenplay#129
|
|
77
|
+
- Status: NOT enforced in the model today (Screenplay#129).
|
|
78
78
|
- Decision inputs: the authoritative facts or state.
|
|
79
79
|
- Missing guarantee: why the construct does not protect the decision.
|
|
80
80
|
- Race consequence: what two individually plausible commands could jointly violate.
|
|
@@ -106,11 +106,11 @@ empty or `$eventSourceId`). Reducers, joins, children, nested sources and **even
|
|
|
106
106
|
routing** (fan-in from many streams by a payload reference) are refused, and a concurrency scope
|
|
107
107
|
on the referenced source does not see appends made on other sources. A rule over such a view, for
|
|
108
108
|
example a course capacity computed from enrolment streams, needs option a or b: write the
|
|
109
|
-
deciding fact on the source that owns the state, or give each scarce item its own identity. Sources: Arc `v22.
|
|
109
|
+
deciding fact on the source that owns the state, or give each scarce item its own identity. Sources: Arc `v22.72.0:Documentation/backend/csharp/chronicle/read-models/injecting-into-commands.md` (limits unchanged since v22.50.5);
|
|
110
110
|
`chronicle-boundaries.md`.
|
|
111
111
|
|
|
112
|
-
**Availability in Stage-rendered applications.** Stage
|
|
113
|
-
and Chronicle client/kernel 19.
|
|
112
|
+
**Availability in Stage-rendered applications.** Stage 4.73.1 scaffolds Arc 22.68.0
|
|
113
|
+
and Chronicle client/kernel 19.45.0 (not the latest releases). `[ProtectedDecision]` and `DecisionRead<T>` /
|
|
114
114
|
`IDecisionReads` exist in that package set; source checks are in
|
|
115
115
|
`cratis-stage-rendering-and-sandbox` `references/rendered-application.md`.
|
|
116
116
|
This does not mean Stage emits protected decisions. Gap-fill must opt into the
|
|
@@ -119,7 +119,7 @@ read in the active unit of work. For refused shapes choose option a/b (state on
|
|
|
119
119
|
its owning stream or one identity per scarce item), or agreed compensation c.
|
|
120
120
|
Keep the rule **NOT enforced in the model today** with its race consequence.
|
|
121
121
|
Never infer protection from `.play` `reads` + `require`, weaken the rule to render,
|
|
122
|
-
or edit managed dependency files. Older Stage 4.24.x scaffolds predate these APIs.
|
|
122
|
+
or edit managed dependency files. Older Stage 4.24.x scaffolds predate these APIs. Arc 22.72.0 and Chronicle 19.50.0 are the latest releases; the scaffold does not move with them.
|
|
123
123
|
|
|
124
124
|
## 4. Concurrency scenarios
|
|
125
125
|
For each enforced or recorded rule write three short scenarios:
|
|
@@ -185,11 +185,12 @@ behaviour. Write the answer in the slice `documentation`.
|
|
|
185
185
|
date views and rules use. Constraints and reactions still see record order.
|
|
186
186
|
|
|
187
187
|
## 10. Specification limits (no local spec engine)
|
|
188
|
-
- A spec can show a source re-claiming its own value
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
188
|
+
- A spec can show a source re-claiming its own value, a `unique event` violation and a collision
|
|
189
|
+
between two different sources: `for` on `given` events (ESM v2) establishes a claim on one source
|
|
190
|
+
and attempts the same value on another (`specifications.md`; `streams-example.md` uses it). It is a
|
|
191
|
+
sequential history, not a race proof. The `constraints.md` sentence that it "cannot yet show a
|
|
192
|
+
collision between two event sources" is stale (`cratis-screenplay-toolchain` `references/doc-contradictions.md`).
|
|
193
|
+
Spec outcomes come only from a reference run (V4) or rendered tests. See `cratis-screenplay-scenario-coverage`.
|
|
193
194
|
- Constraint violation messages are fixed strings: copy them exactly into `then error`.
|
|
194
195
|
- For every value constraint write a competing-claim spec (one source owns the value, a
|
|
195
196
|
different source attempts it) using `when <Command>` with the earlier fact as `given`.
|
package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/evolution.md
CHANGED
|
@@ -77,7 +77,7 @@ Procedure and ownership: the identity procedure in `cratis-screenplay-modeling-l
|
|
|
77
77
|
owning session, or a brief that asks for the rename, applies it; a subagent without MCP returns
|
|
78
78
|
the catalog-changing request to the owner; never leave a requested change silently unapplied).
|
|
79
79
|
- Several generations select ESM v4; that binds executably on both tools (compiled
|
|
80
|
-
with `evolution-example.md`). Stage 4.
|
|
80
|
+
with `evolution-example.md`). Stage (still, at 4.73.1) admits v4 but refuses any evolved event and its
|
|
81
81
|
dependent scope with `STAGE-ESM-026` (it cannot render event-type migrations yet, Stage#204,
|
|
82
82
|
which depends on Screenplay#71), and its runtime still refuses evolved events: the evolved
|
|
83
83
|
events are gap-fill, with migrations hand-written per `cratis-chronicle-event-type-migration`.
|
package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/provenance.md
CHANGED
|
@@ -11,11 +11,10 @@
|
|
|
11
11
|
|
|
12
12
|
Event Modeling practice is by Adam Dymitruk and Martin Dilger, cited as practice; no text taken.
|
|
13
13
|
|
|
14
|
-
## Adapted closely (Martin Dilger and Nebulit GmbH
|
|
14
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
15
15
|
|
|
16
16
|
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
17
|
-
by Martin Dilger and Nebulit GmbH (https://nebulit.de)
|
|
18
|
-
is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
17
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
|
|
19
18
|
|
|
20
19
|
| Source file | Used in | How |
|
|
21
20
|
|---|---|---|
|
|
@@ -23,5 +22,6 @@ is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
|
23
22
|
| `.claude/skills/eventmodeling-optimizing-stream-design`, patterns reference: decision tree, red flags 2-4, composite and collection and log patterns | `references/stream-patterns.md` "Boundary decision tree", "Red flags", "Boundary patterns by domain" | adapted closely, restored from #493; red flag 1 ("no natural end") dropped because it contradicts long-lived identities; event-granularity tip dropped (generic update events are a defect here) |
|
|
24
23
|
| `.claude/skills/eventmodeling-optimizing-stream-design`, domain-patterns reference: per-domain identity entries | `references/stream-patterns.md` "Boundary patterns by domain" | translated to invoicing, marina, memberships, enrolment and hire; lifetimes and archival splits dropped |
|
|
25
24
|
| `.claude/skills/eventmodeling-applying-conways-law/SKILL.md`: interview questions with follow-up triggers, six-step ownership workflow, quality checklist | `references/boundaries.md` "Ownership interview", "Ownership and interface inventory", "Responsibility matrix and ownership timeline", "Boundary checklist" | adapted closely; "team = system" absolutes deliberately not adopted, kept "not by law" |
|
|
26
|
-
| `.claude/skills/eventmodeling-applying-conways-law`, examples reference: responsibility matrix, swimlane timeline, inter-system communication | `references/boundaries.md` "Responsibility matrix and ownership timeline", "Worked walkthrough" | translated to marina and invoicing
|
|
25
|
+
| `.claude/skills/eventmodeling-applying-conways-law`, examples reference: responsibility matrix, swimlane timeline, inter-system communication | `references/boundaries.md` "Responsibility matrix and ownership timeline", "Worked walkthrough" | translated to marina and invoicing (see the next row for the indirect-producer attribution) |
|
|
27
26
|
| `.claude/skills/eventmodeling-core-rules/SKILL.md`: immutability, calculated-event anti-pattern, causality, open question versus decided failure, "left chair" fan-out, offline-first | `references/stream-patterns.md` "Core rules that bear on stream design", `SKILL.md` modeling defaults | adapted closely, translated to Screenplay constructs; board lanes, linked copies and role catalog not adopted here (other skills own them) |
|
|
27
|
+
| `.claude/skills/eventmodeling-applying-conways-law/SKILL.md`, examples reference: team and system boundary as one, indirect-producer attribution | `references/boundaries.md` "Ownership by design (optional lens)" | Adapted closely as an optional lens with the "team = system" claim kept as a hypothesis to test; indirect-producer attribution adopted for public events, with ownership staying with the deciding boundary |
|
|
@@ -164,7 +164,7 @@ module Courses
|
|
|
164
164
|
then denied
|
|
165
165
|
|
|
166
166
|
slice StateChange EnrolMember
|
|
167
|
-
description "Atomic here: one active enrolment per member and course (composite unique constraint, released by withdrawal), and one MemberEnrolled per enrolment stream, so a retry with the same enrolment id after a lost reply cannot enrol twice (the composite constraint alone lets a source re-claim its own value). NOT enforced in the model today: 'enrolments never exceed the course capacity'. The rule depends on other streams' state: `reads` is PLAY0271 and `require` over a view is PLAY0268 at binding (Screenplay#129
|
|
167
|
+
description "Atomic here: one active enrolment per member and course (composite unique constraint, released by withdrawal), and one MemberEnrolled per enrolment stream, so a retry with the same enrolment id after a lost reply cannot enrol twice (the composite constraint alone lets a source re-claim its own value). NOT enforced in the model today: 'enrolments never exceed the course capacity'. The rule depends on other streams' state: `reads` is PLAY0271 and `require` over a view is PLAY0268 at binding (Screenplay#129). The enrolment-to-course fan-in cannot be protected as modeled (see the CourseAvailability slice): concurrent enrolments can overbook. Target enforcement is an open decision (consistency-and-concurrency.md section 3); the model stays as stated intent, recorded in STATE.md."
|
|
168
168
|
command EnrolMember
|
|
169
169
|
enrolmentId EnrolmentId identifier
|
|
170
170
|
courseId CourseId
|
|
@@ -5,5 +5,5 @@ Third-party notices
|
|
|
5
5
|
|
|
6
6
|
This skill adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
|
|
7
7
|
(https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
|
|
8
|
-
https://nebulit.de), used with the
|
|
9
|
-
|
|
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.
|
|
@@ -43,7 +43,8 @@ or Screenplay 4.139.0.
|
|
|
43
43
|
PLAY0029 (a misspelt keyword or a `type` inside a slice) drops a construct silently.
|
|
44
44
|
3. **Pick the compiler deliberately and name it.** Standalone `screenplay` for
|
|
45
45
|
current language checks and reference specifications; `cratis` for rendering
|
|
46
|
-
and generation. Bundled and standalone versions differ
|
|
46
|
+
and generation. Bundled and standalone versions differ (CLI 3.53.1 bundles 4.137.0;
|
|
47
|
+
the standalone pin is 4.139.0). Report both tool and
|
|
47
48
|
version, rather than transferring a verdict across releases.
|
|
48
49
|
4. **Know the mode** (design, executable, renderable) and write from its subset.
|
|
49
50
|
5. **Capability is not correctness.** The tool you ran decides what is accepted today; the
|
|
@@ -64,7 +65,7 @@ or Screenplay 4.139.0.
|
|
|
64
65
|
| | Standalone `screenplay` | `cratis screenplay ...` |
|
|
65
66
|
| --- | --- | --- |
|
|
66
67
|
| Check root | `screenplay <root> --warnaserror --no-color` | `cratis screenplay validate <root> --warnings-as-errors -o json-compact` |
|
|
67
|
-
| Scope/checks | `--scope <address>`, `--check <names>`; a scoped pass is not whole-application success |
|
|
68
|
+
| Scope/checks | `--scope <address>`, `--check <names>`; a scoped pass is not whole-application success | `validate --executable` (bundled binder, no write), `--check <names>`, `--scope`; `render --scope`/`--check`; `cratis screenplay conform` |
|
|
68
69
|
| Reference execution | `screenplay test <root>` or MCP `run-specifications` | Discover bundled MCP capability; target tests are not V4 |
|
|
69
70
|
| MCP | `screenplay mcp <root>`; discover schemas | `cratis screenplay mcp [root]`; registered by `cratis ai install` |
|
|
70
71
|
| Render version boundary | Binder admission is not Stage admission | Pinned CLI (`versions.md`) passes through ESM v10 to Stage construct admission; bound newer models: `CLI-RENDER-004` |
|
|
@@ -85,12 +86,12 @@ Independent results, not a ladder. Read `references/verdicts.md` for the command
|
|
|
85
86
|
| V4 | reference specifications run | `screenplay test` or MCP `run-specifications`; unsupported/unbound is not a pass; rendered Debug tests are V5.tests, never V4 |
|
|
86
87
|
| V5 | rendered and target-verified | `cratis render`, then Debug build and tests; report admission, publication, build and tests separately |
|
|
87
88
|
|
|
88
|
-
V2 and V3 need MCP: send `initialize`, then `notifications/initialized`, and start the
|
|
89
|
+
V2 and V3 need MCP (V3 alone can also be read from `cratis screenplay validate --executable <root>`, labeled as the bundled compiler): send `initialize`, then `notifications/initialized`, and start the
|
|
89
90
|
server with a fixed root when the tool is older than 4.63.2 (the roots bug hit 4.63.1 and the
|
|
90
91
|
4.60.1 bundled by cratis before 3.28.2; 4.66.0 and later and cratis 3.28.2 are fine). A subagent without MCP reports "V2 not run: no MCP in this agent".
|
|
91
92
|
|
|
92
|
-
One line per verdict, tool first, for example `V1 pass (screenplay 4.
|
|
93
|
-
`V3 blocked: PLAY0268 x3 (
|
|
93
|
+
One line per verdict, tool first, for example `V1 pass (screenplay 4.139.0, 3 files)` and
|
|
94
|
+
`V3 blocked: PLAY0268 x3 (filter query, pii)`. Name the source identity (commit plus the digest from
|
|
94
95
|
the source-identity helper (`cratis-screenplay-modeling-lifecycle` `references/verdicts-and-modes.md` "Source identity")) the verdict ran on; keep it apart from the MCP
|
|
95
96
|
`modelRevision`, which is semantic and, without `.screenplay/identities.json`,
|
|
96
97
|
changes with the root folder name.
|
|
@@ -99,15 +100,16 @@ changes with the root folder name.
|
|
|
99
100
|
|
|
100
101
|
- **Design**: every construct family parses; use it to model first. Compiled shapes:
|
|
101
102
|
`references/cheat-sheet.md`. Read [references/cheat-sheet-example.md](references/cheat-sheet-example.md) when you need one complete design-mode document with every construct family.
|
|
102
|
-
- **Executable** (binds, V3): `references/executable-subset.md`.
|
|
103
|
-
|
|
103
|
+
- **Executable** (binds, V3): `references/executable-subset.md`. Optional keyed lookups, unfiltered
|
|
104
|
+
lists and lists narrowed by one `by` key (observable too); `filter`, `scoped to`, `performer` and composite `by` do not bind; no handler (PLAY0268, with or without `implementation`/`hint`); `reads` and
|
|
104
105
|
`concurrency` do not bind (PLAY0271); no compliance markers (`pii`/`secret`); v6 constructs bind on Screenplay 4.61 or
|
|
105
106
|
later (standalone, and cratis 3.28.2 or later); generated values and `returns` responses bind (ESM v7)
|
|
106
107
|
from Screenplay 4.68.0 (also in the current CLI bundle) (`references/generated-responses-example.md`). Read [references/executable-example.md](references/executable-example.md) when you need a small StateChange and StateView model that binds executable, [references/pdl-example.md](references/pdl-example.md) when writing projection forms that bind and run, and [references/automation-translate-example.md](references/automation-translate-example.md) when writing Automation and Translate slices (ESM v6).
|
|
107
|
-
- **Renderable** (V5): `references/renderable-subset.md`
|
|
108
|
-
older
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
- **Renderable** (V5): `references/renderable-subset.md` has the current Stage 4.73.1 table and
|
|
109
|
+
explicitly labeled older probes. The CLI admits through v10 to Stage construct checks; generated
|
|
110
|
+
values and responses get `STAGE-ESM-028`/`029`, not a blanket compiler refusal. Run admission
|
|
111
|
+
before claiming a particular model renders (`cratis render --scope` for an admitted part, `--check`
|
|
112
|
+
for no-write planning).
|
|
111
113
|
- **Event sources, streams and routes** bind as ESM v8 at 4.125.0.
|
|
112
114
|
The pinned CLI/Stage pair (`references/versions.md`) reaches admission through v10, not blanket
|
|
113
115
|
rendering. Operations and exact numeric source mode remain unadmitted.
|
|
@@ -183,7 +185,7 @@ Read [references/diagnostics.md](references/diagnostics.md) when a PLAY, STAGE o
|
|
|
183
185
|
11. Declare an event once, in its producing slice.
|
|
184
186
|
12. Quoted `import "glob"` is your own files; unquoted `import Ctx.Event` is a foreign
|
|
185
187
|
contract and does not bind.
|
|
186
|
-
13. A handler never binds; `numbers exact` never binds; descriptions
|
|
188
|
+
13. A handler never binds; `numbers exact` never binds; descriptions render only as XML doc comments, never as behavior.
|
|
187
189
|
|
|
188
190
|
## Gate
|
|
189
191
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
One complete document with every construct family. Design mode, not executable. Prose rules: [cheat-sheet.md](cheat-sheet.md); tool versions: [versions.md](versions.md); what binds: [executable-subset.md](executable-subset.md).
|
|
4
4
|
|
|
5
|
-
Binding blockers: unquoted import, `pii`, `reads` (PLAY0271), `starts with`,
|
|
5
|
+
Binding blockers: unquoted import, `pii`, `reads` (PLAY0271), `starts with`, a `filter` query (lists and observable lists bind). Executable shapes are in the sibling examples. The bare-marker fence compiles warning-free on standalone 4.127.0; the earlier legacy-marker version compiled on 4.66.0 and CLI 3.28.2. `RecordingAPayment` lists the `InvoiceClosed` cascade, which the cratis 3.27.1 bundle (4.60.1) rejected with a false PLAY0285 ("outcome cannot be produced by 'RecordPayment'"); 3.28.2 accepts it.
|
|
6
6
|
|
|
7
7
|
```screenplay test=unbound
|
|
8
8
|
// Design-mode cheat-sheet: every construct family; compiles warning-free on the standalone tool.
|
|
@@ -153,9 +153,9 @@ module Billing
|
|
|
153
153
|
readmodel InvoiceRow
|
|
154
154
|
invoiceId InvoiceId
|
|
155
155
|
number String
|
|
156
|
-
query InvoiceById => InvoiceRow optional // keyed
|
|
156
|
+
query InvoiceById => InvoiceRow optional // keyed optional lookup (unfiltered lists bind too)
|
|
157
157
|
by invoiceId InvoiceId
|
|
158
|
-
query ListInvoices => observable InvoiceRow[] // design mode only
|
|
158
|
+
query ListInvoices => observable InvoiceRow[] // design mode only: the `filter` below is PLAY0268 at binding
|
|
159
159
|
filter number String optional
|
|
160
160
|
projection InvoiceList => InvoiceRow
|
|
161
161
|
from InvoiceRegistered
|
|
@@ -87,7 +87,7 @@ remain unadmitted. Compile and test each relevant fixture with the chosen tool.
|
|
|
87
87
|
generated identifier` (PLAY0484); legacy `?` is PLAY0479 (information).
|
|
88
88
|
- Ownership policies: `require claim "ownerId" matches subject` (subject = command identifier
|
|
89
89
|
or keyed query argument) or `matches <commandProperty>`; executable; renderable only for
|
|
90
|
-
text-backed targets (
|
|
90
|
+
text-backed targets at the 4.24-era Stage; Stage 4.73.1 also renders Uuid and Date claim targets (see `renderable-subset.md`; unsupported subjects: STAGE-ESM-015).
|
|
91
91
|
|
|
92
92
|
## Exact numeric source mode
|
|
93
93
|
|
|
@@ -55,8 +55,10 @@ read from source or documentation.
|
|
|
55
55
|
| 27 | decision index | `decisions/README.md` row 0020 shows stage `none` while v5 is implemented | the code: v5 `then no readmodel` binds |
|
|
56
56
|
| 28 | `visualize-model` kind | the tool filters on the kind "Reactor" (`McpVisualization.cs:21`) although the construct is a Reaction; its added/removed summary never counts reactions (Screenplay#379, open) | the model, not the summary |
|
|
57
57
|
| 29 | bodied reducers in Stage | cli `Documentation/reference/screenplay.md:38` says bodied reducers are unsupported (STAGE-ESM-019) | Stage 4.24 code admits pure allowlisted reducer bodies (`PureTransitionAdmission.cs`); trust the code |
|
|
58
|
-
| 30 | `cratis screenplay validate <file>` | the command reads as a document validator | file mode
|
|
58
|
+
| 30 | `cratis screenplay validate <file>` | the command reads as a document validator | file mode ignored the file's imports and reported false unknown-name warnings on CLI 3.28.2 (cli#244, closed by PR #258: later releases compile the file with its imports); validate the folder anyway [probed on 3.28.2] |
|
|
59
59
|
| 31 | cli false PLAY0285 | `D/diagnostics.md:640` defines PLAY0285 as a contradiction against every possible producer | cratis before 3.28.2 reported it falsely on reaction cascades (cli#242); not reproduced on cratis 3.28.2 [probed] |
|
|
60
|
+
| 32 | competing-claim specification | `D/constraints.md` says a specification "cannot yet show a collision between two event sources" | `D/specifications.md`: `for` on `given` events establishes a claim on one source and attempts the same value on another; the specification page and the tool decide (checked at v4.139.0) |
|
|
61
|
+
| 33 | descriptions in rendered code | Stage `Documentation/reference/render-plans.md` says the cratis CLI does not yet call `WithAuthoringMetadata` | the CLI calls it since 3.51.0 (`CratisRenderTarget.cs`): descriptions and documentation render as XML doc comments; `CLI-RENDER-006` when skipped (checked at cli v3.53.1) |
|
|
60
62
|
|
|
61
63
|
Rows 0 to 12, 14 to 21 and 23 were re-read at the v4.66.0 line numbers above; rows 14, 15,
|
|
62
64
|
19, 20 and 23 are properties of the language rather than documentation defects and were
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
- Caller and compliance boundary (4.127.0)
|
|
6
6
|
- Admitted on both compilers
|
|
7
7
|
- Admitted from Screenplay 4.61 (ESM v6): standalone tool and cratis 3.28.2 or later
|
|
8
|
-
- Generated values and responses (ESM v7): standalone 4.68.0 or later
|
|
8
|
+
- Generated values and responses (ESM v7): standalone 4.68.0 or later; the cratis 3.53.1 bundle binds them too
|
|
9
9
|
- Released public boundaries and observer routes
|
|
10
10
|
- Code attachments (what binds, what never does)
|
|
11
11
|
- Refused (code, reason): fix, or record as a mode gap
|
|
@@ -15,25 +15,30 @@
|
|
|
15
15
|
Current pins: `versions.md`. Detailed
|
|
16
16
|
4.66.0/4.68.0 binder probes below retain their historical labels. Current source
|
|
17
17
|
admits routes as ESM v8, public/direction constructs as v9, identity/overrides/filters
|
|
18
|
-
as v10
|
|
19
|
-
`numbers exact` source mode and
|
|
18
|
+
as v10, qualifying non-route Double literals as v11 (exact lowering of Double-mode literals)
|
|
19
|
+
and non-positional enum numbers as v12. Operations, the `numbers exact` **source mode** (PLAY0268) and
|
|
20
|
+
reaction refusals/redelivery remain unadmitted. Use the actual
|
|
20
21
|
binder before promoting an older probe to a current capability claim.
|
|
21
22
|
|
|
22
23
|
What the binder admits, and what it refuses with which code. The answer depends on the
|
|
23
|
-
compiler version: standalone
|
|
24
|
-
|
|
24
|
+
compiler version: the standalone tool (4.139.0) binds through v12; the compiler bundled in cratis
|
|
25
|
+
3.53.1 (4.137.0) binds ESM through v10 for rendering and refuses non-positional enum numbers at
|
|
26
|
+
binding; older bundles (4.66.0 in cratis 3.28.x, admitting v1 to v6; 4.60.1 before 3.28.2, v1 to v5)
|
|
27
|
+
are history.
|
|
25
28
|
Tool facts and the exact v6 messages: `versions.md`. Always name
|
|
26
29
|
the tool with a V2 or V3 result. When tool and documentation disagree, the tool decides
|
|
27
30
|
current capability; the documentation and the domain decide intended correctness. Record
|
|
28
31
|
the gap, never strip the model to pass.
|
|
29
32
|
|
|
30
|
-
Binding is observed
|
|
31
|
-
|
|
33
|
+
Binding is observed through MCP (`read-workspace view=executable-diagnostics`), a render, or
|
|
34
|
+
`cratis screenplay validate --executable <root>` (bundled compiler; binding errors only, writes
|
|
35
|
+
nothing; exit 5 when it does not bind). `screenplay <folder>` and plain `cratis screenplay validate`
|
|
36
|
+
never bind (`verdicts.md`).
|
|
32
37
|
|
|
33
38
|
Complete examples that bind live in `executable-example.md` (both compilers),
|
|
34
39
|
`pdl-example.md` (projections, both compilers) and `automation-translate-example.md`
|
|
35
40
|
(ESM v6; standalone tool and cratis 3.28.2 or later) and `generated-responses-example.md`
|
|
36
|
-
(ESM v7; standalone tool 4.68.0 or later
|
|
41
|
+
(ESM v7; standalone tool 4.68.0 or later, and the cratis 3.53.1 bundle).
|
|
37
42
|
|
|
38
43
|
## Caller and compliance boundary (4.127.0)
|
|
39
44
|
|
|
@@ -106,13 +111,15 @@ Authority: v4.127.0 `context.md`, `identity.md`, `concepts.md`, `events.md`, `pu
|
|
|
106
111
|
- Command specifications that list reaction cascades (no false PLAY0285).
|
|
107
112
|
- In a `then` list after `when append`, only what followed the appended event.
|
|
108
113
|
|
|
109
|
-
## Generated values and responses (ESM v7): standalone 4.68.0 or later
|
|
114
|
+
## Generated values and responses (ESM v7): standalone 4.68.0 or later; the cratis 3.53.1 bundle binds them too
|
|
110
115
|
|
|
111
116
|
Facts read at `v4.68.0`: decision 0026 and `Documentation/screenplay/{commands,specifications,interoperability}.md`.
|
|
112
117
|
A model selects ESM v7 only when it uses a generated property, a response, a generated fixture or a `then returns`
|
|
113
118
|
expectation; every other model keeps its version, bytes and revision. The cratis CLI 3.28.3 (bundled 4.66.0)
|
|
114
|
-
|
|
115
|
-
|
|
119
|
+
reported `PLAY0268` for these constructs (history). The current CLI (3.53.1, bundled 4.137.0) binds them
|
|
120
|
+
and reaches Stage planning, where Stage 4.73.1 refuses generated values with `STAGE-ESM-028` and
|
|
121
|
+
responses with `STAGE-ESM-029` (Stage#175), so they bind and run but are not rendered: gap-fill with the
|
|
122
|
+
model as contract. Complete example:
|
|
116
123
|
`generated-responses-example.md`.
|
|
117
124
|
|
|
118
125
|
- A generated property is command-only, required, scalar and a concept backed by `Uuid`; bare `Uuid`, optional and collection
|
|
@@ -187,8 +194,9 @@ bodies still leave their owner non-executable.
|
|
|
187
194
|
`require`/`validate` bodies (`v4.66.0:Documentation/screenplay/commands.md`, `context.md`).
|
|
188
195
|
- A handler therefore makes the slice non-executable and non-renderable: it is gap-fill
|
|
189
196
|
with the model as the contract.
|
|
190
|
-
- Stage
|
|
191
|
-
code validation (STAGE-ESM-005)
|
|
197
|
+
- Stage admits only pure reducer bodies (Roslyn allowlist, STAGE-ESM-019 and 022);
|
|
198
|
+
code validation is refused (STAGE-ESM-005). Opaque pure policies render at Stage 4.73.1 (4.24
|
|
199
|
+
refused them with STAGE-ESM-015).
|
|
192
200
|
- The reference runner returns Unsupported for the opaque bodies that do bind (rule and
|
|
193
201
|
policy predicates, code validation, reducer transitions); a specification that needs one
|
|
194
202
|
never passes. Handlers, file constraints and query performers (and reaction effects on a trigger with
|
|
@@ -202,8 +210,8 @@ bodies still leave their owner non-executable.
|
|
|
202
210
|
| `Automation` or `Translate` slice, `reaction`, `capture`, `trigger`; `given clock`, `when clock`, `when trigger`, `when capture` | PLAY0268 | **cratis before 3.28.2 bundles only** (4.60.1); messages in `versions.md` |
|
|
203
211
|
| Unquoted `import Other.Contract` | PLAY0268 | external contract import is not bound |
|
|
204
212
|
| `pii` or `secret` on any concept (also alias/legacy markers) | PLAY0268 | Compliance requires portable data-subject semantics; scopes/qualifiers do not admit it. Secret provider mapping is `[Encrypted]` + `[NotAudited]`, not a bind/render claim |
|
|
205
|
-
| `query`
|
|
206
|
-
| `
|
|
213
|
+
| `query` with a composite `by` block, or `by ... from` context-derived arguments | PLAY0268 | composite `by` blocks remain unadmitted (#599). An optional scalar snapshot lookup, an unfiltered list (`RM[]`) and a list narrowed by one caller-supplied `by` key bind, in their `observable` form too (since 4.105.0) |
|
|
214
|
+
| `filter`, `scoped to`, `performer` queries | PLAY0268 | "uses delivery, filtering, scope, or implementation behavior outside the first ESM v1 vertical." `observable` is not the blocker: it goes in the return position (`=> observable RM[]`); as a body line it is PLAY0048 |
|
|
207
215
|
| `contains` or `starts with` in conditions | PLAY0268 | equality and numeric ordering only |
|
|
208
216
|
| Date or DateTime comparison, `today` | PLAY0268 | no runtime date value |
|
|
209
217
|
| Rule on a nested path (`lines.qty all > 0`) | PLAY0268 | put the rule on the nested value's concept |
|
|
@@ -222,7 +230,7 @@ bodies still leave their owner non-executable.
|
|
|
222
230
|
| `$eventContext.occurred.Week` | PLAY0273 | derived value |
|
|
223
231
|
| Projection `parent p` where `p` is not on the child event | PLAY0273 | "Event property not found" |
|
|
224
232
|
| `generated` or `returns` on a compiler before 4.68.0 (4.66.0 and 4.67.0 refuse; 4.66.0 is bundled in cratis 3.28.x) | PLAY0268 | admitted from standalone 4.68.0 (ESM v7), see above |
|
|
225
|
-
| Operations or systems, `numbers exact
|
|
233
|
+
| Operations or systems, `numbers exact` source mode, reaction refusals/redelivery | PLAY0268 | not admitted by any supported ESM version; one such construct leaves the **whole** application without an executable model. Event sources/streams/routes instead bind as ESM v8 on the current compiler (`sources-and-streams.md`) |
|
|
226
234
|
| Spec of a gated command or query without `given caller` | PLAY0389 | module and feature gates count |
|
|
227
235
|
| `given` or `then readmodel` missing key parts | PLAY0351 | explicit `key` marks replace inference; composite fixtures need every part but remain unadmitted (#599) |
|
|
228
236
|
| When-less spec asserting events or errors | PLAY0352 | |
|
|
@@ -14,11 +14,10 @@ the file that holds it.
|
|
|
14
14
|
| --- | --- | --- |
|
|
15
15
|
| TrogonStack/agentskills `7b249d3ee42d8b7e11fa564141ebd5fbc37aadf1` (MIT, Copyright (c) 2025 Straw Hat, LLC) | none: no passage of this skill is adapted from it | no third-party notice needed in `LICENSE` |
|
|
16
16
|
|
|
17
|
-
## Adapted closely (Martin Dilger and Nebulit GmbH
|
|
17
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
18
18
|
|
|
19
19
|
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
20
|
-
by Martin Dilger and Nebulit GmbH (https://nebulit.de)
|
|
21
|
-
is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
20
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
|
|
22
21
|
|
|
23
22
|
| Source file | Used in | How |
|
|
24
23
|
|---|---|---|
|