@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
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
|
@@ -27,6 +27,23 @@ compatibility scenarios below first; the identity owner then applies the change
|
|
|
27
27
|
A test for "generation or new event": a new version must be convertible from the old one
|
|
28
28
|
without inventing facts. If it is not, it is a different event.
|
|
29
29
|
|
|
30
|
+
## Enum identities are stored contracts
|
|
31
|
+
|
|
32
|
+
Unnumbered enums use zero-based declaration positions: a reorder or insertion can
|
|
33
|
+
reinterpret stored numbers. Before reordering or removing members, pin each to its
|
|
34
|
+
**existing stored number**, not its new position. `propose-number-enum-members`
|
|
35
|
+
pins an unnumbered enum to current positions; use it before changing order, only
|
|
36
|
+
when those positions match storage. Never renumber or reuse a published member's
|
|
37
|
+
number. Removing a member still needs replay and mixed-reader compatibility decisions.
|
|
38
|
+
|
|
39
|
+
Numbered members may have sparse or negative unique int32 values, all or none per
|
|
40
|
+
enum. Source authoring shipped in 4.137.0; non-positional numbers bind as ESM v12
|
|
41
|
+
in 4.139.0. Positional pins retain older executable bytes/version. CLI 3.53.1 and
|
|
42
|
+
Stage 4.73.1 bundle 4.137.0 and do not admit v12; keep the pins and report the gap.
|
|
43
|
+
Short-lived input/view-only enums may remain positional. Use opt-in
|
|
44
|
+
`--check enum-pinning` (PLAY0671) to find unnumbered enums used by event properties.
|
|
45
|
+
Syntax/example and source evidence: command-surface [enum numbers](../../cratis-screenplay-command-surface/references/enum-numbers.md).
|
|
46
|
+
|
|
30
47
|
## Compatibility scenarios (write before editing)
|
|
31
48
|
For each changed event, answer in the slice `documentation` or `STATE.md`:
|
|
32
49
|
1. **Replay**: does every projection still build from generation 1 facts? Which value do old
|
|
@@ -60,7 +77,7 @@ Procedure and ownership: the identity procedure in `cratis-screenplay-modeling-l
|
|
|
60
77
|
owning session, or a brief that asks for the rename, applies it; a subagent without MCP returns
|
|
61
78
|
the catalog-changing request to the owner; never leave a requested change silently unapplied).
|
|
62
79
|
- Several generations select ESM v4; that binds executably on both tools (compiled
|
|
63
|
-
with `evolution-example.md`). Stage 4.
|
|
80
|
+
with `evolution-example.md`). Stage (still, at 4.73.1) admits v4 but refuses any evolved event and its
|
|
64
81
|
dependent scope with `STAGE-ESM-026` (it cannot render event-type migrations yet, Stage#204,
|
|
65
82
|
which depends on Screenplay#71), and its runtime still refuses evolved events: the evolved
|
|
66
83
|
events are gap-fill, with migrations hand-written per `cratis-chronicle-event-type-migration`.
|
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 |
|
|
@@ -216,7 +216,7 @@ Some event stores decide consistency by a query over tagged events instead of on
|
|
|
216
216
|
check to event types, source type or stream (`concurrency` block, Screenplay
|
|
217
217
|
`commands.md`). Legacy concurrency metadata still fails binding (PLAY0271),
|
|
218
218
|
but sources/streams/routes bind and reference-execute as ESM v8 on 4.125.0.
|
|
219
|
-
Route admission does not make a view read protected. CLI
|
|
219
|
+
Route admission does not make a view read protected. The pinned CLI (toolchain `references/versions.md`) reaches Stage construct checks
|
|
220
220
|
through v10; see toolchain `references/versions.md`. Model the stream by business
|
|
221
221
|
identity; when a rule truly needs a cross-stream decision, record it (see
|
|
222
222
|
`consistency-and-concurrency.md`) rather than inventing a construct.
|
|
@@ -164,7 +164,7 @@ module Courses
|
|
|
164
164
|
then denied
|
|
165
165
|
|
|
166
166
|
slice StateChange EnrolMember
|
|
167
|
-
description "Atomic here: one active enrolment per member and course (composite unique constraint, released by withdrawal), and one MemberEnrolled per enrolment stream, so a retry with the same enrolment id after a lost reply cannot enrol twice (the composite constraint alone lets a source re-claim its own value). NOT enforced in the model today: 'enrolments never exceed the course capacity'. The rule depends on other streams' state: `reads` is PLAY0271 and `require` over a view is PLAY0268 at binding (Screenplay#129
|
|
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.
|
|
@@ -22,16 +22,16 @@ files is one application: always check the folder, never one file of it.
|
|
|
22
22
|
|
|
23
23
|
When choosing or upgrading a tool, or checking version-specific capabilities, read `references/versions.md`; it is the only version table, and other skills point to it. For exact diagnostic codes, MCP names/parameters and standalone CLI options, search the large published [references/screenplay-contract.json](references/screenplay-contract.json), pinned by [references/screenplay-contract.version](references/screenplay-contract.version), rather than loading it in full. Locate a diagnostic by its exact `code` (for example `"code": "PLAY0029"`), a tool by its exact `name` (for example `"name": "read-workspace"`), or a command in `cliCommands`; read the matched object for retirement, parameters or options. [references/screenplay-contract-exceptions.json](references/screenplay-contract-exceptions.json) records reasoned exceptions for historical statements; it does not change the current contract.
|
|
24
24
|
|
|
25
|
-
The standalone pin is Screenplay 4.
|
|
26
|
-
|
|
25
|
+
The standalone pin is Screenplay 4.139.0.
|
|
26
|
+
CLI and bundled package pins: `references/versions.md`. The single version table records
|
|
27
27
|
released source evidence and historical probes separately; do not relabel an old
|
|
28
28
|
render/browser result as a probe of the current packages.
|
|
29
29
|
|
|
30
30
|
Historical screens-release evidence: CLI 3.40.7 / Stage 4.51.1 / bundled
|
|
31
31
|
Screenplay 4.114.0 opened the canonical corpus with `executableReady true`
|
|
32
32
|
and the stdio transcript exposed 37 tools; standalone language 4.122.0 was
|
|
33
|
-
recorded in that vector. These retained results are not a rerun on CLI 3.
|
|
34
|
-
or Screenplay 4.
|
|
33
|
+
recorded in that vector. These retained results are not a rerun on CLI 3.53.1
|
|
34
|
+
or Screenplay 4.139.0.
|
|
35
35
|
|
|
36
36
|
## Ground rules
|
|
37
37
|
|
|
@@ -43,7 +43,8 @@ or Screenplay 4.135.0.
|
|
|
43
43
|
PLAY0029 (a misspelt keyword or a `type` inside a slice) drops a construct silently.
|
|
44
44
|
3. **Pick the compiler deliberately and name it.** Standalone `screenplay` for
|
|
45
45
|
current language checks and reference specifications; `cratis` for rendering
|
|
46
|
-
and generation. Bundled and standalone versions differ
|
|
46
|
+
and generation. Bundled and standalone versions differ (CLI 3.53.1 bundles 4.137.0;
|
|
47
|
+
the standalone pin is 4.139.0). Report both tool and
|
|
47
48
|
version, rather than transferring a verdict across releases.
|
|
48
49
|
4. **Know the mode** (design, executable, renderable) and write from its subset.
|
|
49
50
|
5. **Capability is not correctness.** The tool you ran decides what is accepted today; the
|
|
@@ -64,10 +65,10 @@ or Screenplay 4.135.0.
|
|
|
64
65
|
| | Standalone `screenplay` | `cratis screenplay ...` |
|
|
65
66
|
| --- | --- | --- |
|
|
66
67
|
| Check root | `screenplay <root> --warnaserror --no-color` | `cratis screenplay validate <root> --warnings-as-errors -o json-compact` |
|
|
67
|
-
| Scope/checks | `--scope <address>`, `--check <names>`; a scoped pass is not whole-application success |
|
|
68
|
+
| Scope/checks | `--scope <address>`, `--check <names>`; a scoped pass is not whole-application success | `validate --executable` (bundled binder, no write), `--check <names>`, `--scope`; `render --scope`/`--check`; `cratis screenplay conform` |
|
|
68
69
|
| Reference execution | `screenplay test <root>` or MCP `run-specifications` | Discover bundled MCP capability; target tests are not V4 |
|
|
69
70
|
| MCP | `screenplay mcp <root>`; discover schemas | `cratis screenplay mcp [root]`; registered by `cratis ai install` |
|
|
70
|
-
| Render version boundary | Binder admission is not Stage admission | CLI
|
|
71
|
+
| Render version boundary | Binder admission is not Stage admission | Pinned CLI (`versions.md`) passes through ESM v10 to Stage construct admission; bound newer models: `CLI-RENDER-004` |
|
|
71
72
|
|
|
72
73
|
Read `references/versions.md` when you need the exact messages, exit codes or the MCP roots bug.
|
|
73
74
|
|
|
@@ -85,12 +86,12 @@ Independent results, not a ladder. Read `references/verdicts.md` for the command
|
|
|
85
86
|
| V4 | reference specifications run | `screenplay test` or MCP `run-specifications`; unsupported/unbound is not a pass; rendered Debug tests are V5.tests, never V4 |
|
|
86
87
|
| V5 | rendered and target-verified | `cratis render`, then Debug build and tests; report admission, publication, build and tests separately |
|
|
87
88
|
|
|
88
|
-
V2 and V3 need MCP: send `initialize`, then `notifications/initialized`, and start the
|
|
89
|
+
V2 and V3 need MCP (V3 alone can also be read from `cratis screenplay validate --executable <root>`, labeled as the bundled compiler): send `initialize`, then `notifications/initialized`, and start the
|
|
89
90
|
server with a fixed root when the tool is older than 4.63.2 (the roots bug hit 4.63.1 and the
|
|
90
91
|
4.60.1 bundled by cratis before 3.28.2; 4.66.0 and later and cratis 3.28.2 are fine). A subagent without MCP reports "V2 not run: no MCP in this agent".
|
|
91
92
|
|
|
92
|
-
One line per verdict, tool first, for example `V1 pass (screenplay 4.
|
|
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,17 +100,18 @@ changes with the root folder name.
|
|
|
99
100
|
|
|
100
101
|
- **Design**: every construct family parses; use it to model first. Compiled shapes:
|
|
101
102
|
`references/cheat-sheet.md`. Read [references/cheat-sheet-example.md](references/cheat-sheet-example.md) when you need one complete design-mode document with every construct family.
|
|
102
|
-
- **Executable** (binds, V3): `references/executable-subset.md`.
|
|
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
|
-
CLI
|
|
114
|
+
The pinned CLI/Stage pair (`references/versions.md`) reaches admission through v10, not blanket
|
|
113
115
|
rendering. Operations and exact numeric source mode remain unadmitted.
|
|
114
116
|
Details: `references/sources-and-streams.md` and `references/versions.md`.
|
|
115
117
|
- **Released v9/v10 and published v11:** public contracts and direction select v9;
|
|
@@ -119,6 +121,15 @@ changes with the root folder name.
|
|
|
119
121
|
`key` binds. Read `references/production-routes-and-filters.md` and read-surface
|
|
120
122
|
`references/named-keys.md`; version freeze and numeric boundaries: `references/versions.md`.
|
|
121
123
|
|
|
124
|
+
- **Published v12 (4.139.0):** non-positional enum numbers bind; canonical
|
|
125
|
+
`numbers` parallels `values`. Positional pins preserve earlier executable
|
|
126
|
+
bytes/version. Specifications still use names. The pinned CLI's compiler accepts source
|
|
127
|
+
authoring but refuses non-positional numbers at binding (PLAY0268), before
|
|
128
|
+
renderer admission. Neither its compiler nor Stage reads v12 ESM; upgrading
|
|
129
|
+
only the compiler would not lift their v10 admission ceiling (`references/versions.md`). Syntax:
|
|
130
|
+
command-surface `references/enum-numbers.md`; errors PLAY0667–0670 and opt-in
|
|
131
|
+
`enum-pinning` hint PLAY0671: `references/diagnostics.md`.
|
|
132
|
+
|
|
122
133
|
- **Caller/compliance metadata** at 4.127.0: `$identity` aliases caller built-ins;
|
|
123
134
|
additional identity details are metadata and executable reads still refuse.
|
|
124
135
|
Bare `pii`/`secret` replace legacy spellings; `pii personal` repeats one marker
|
|
@@ -174,7 +185,7 @@ Read [references/diagnostics.md](references/diagnostics.md) when a PLAY, STAGE o
|
|
|
174
185
|
11. Declare an event once, in its producing slice.
|
|
175
186
|
12. Quoted `import "glob"` is your own files; unquoted `import Ctx.Event` is a foreign
|
|
176
187
|
contract and does not bind.
|
|
177
|
-
13. A handler never binds; `numbers exact` never binds; descriptions
|
|
188
|
+
13. A handler never binds; `numbers exact` never binds; descriptions render only as XML doc comments, never as behavior.
|
|
178
189
|
|
|
179
190
|
## Gate
|
|
180
191
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
One complete document with every construct family. Design mode, not executable. Prose rules: [cheat-sheet.md](cheat-sheet.md); tool versions: [versions.md](versions.md); what binds: [executable-subset.md](executable-subset.md).
|
|
4
4
|
|
|
5
|
-
Binding blockers: unquoted import, `pii`, `reads` (PLAY0271), `starts with`,
|
|
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
|
|
@@ -21,10 +21,13 @@ PLAY0268 (#599), not v10. Read [named keys](../../cratis-screenplay-read-surface
|
|
|
21
21
|
Production `stream Source.Stream` overrides and reaction/reducer `from Source[.Stream]`
|
|
22
22
|
select released v10: [routes and filters](production-routes-and-filters.md).
|
|
23
23
|
Qualifying non-route Double literals select published v11 at 4.135.0;
|
|
24
|
-
`numbers exact` does not bind.
|
|
24
|
+
`numbers exact` does not bind. Non-positional enum member numbers (`draft = 1`)
|
|
25
|
+
select published v12 at 4.139.0; positional pins keep earlier bytes/version,
|
|
26
|
+
while specifications still use names. The pinned CLI/Stage pair (`versions.md`) does not admit v12.
|
|
27
|
+
Syntax/example: command-surface `references/enum-numbers.md`.
|
|
28
|
+
See `versions.md` for freeze and numeric boundaries.
|
|
25
29
|
|
|
26
|
-
Current pins:
|
|
27
|
-
single table. Compile evidence below keeps its historical tool labels.
|
|
30
|
+
Current pins: `versions.md` (the single table). Compile evidence below keeps its historical tool labels.
|
|
28
31
|
|
|
29
32
|
The syntax lives in compiled example files next to this one (each is a Markdown file holding
|
|
30
33
|
one complete `screenplay` fence). Copy shapes from them; do not write a form that none of
|
|
@@ -84,7 +87,7 @@ remain unadmitted. Compile and test each relevant fixture with the chosen tool.
|
|
|
84
87
|
generated identifier` (PLAY0484); legacy `?` is PLAY0479 (information).
|
|
85
88
|
- Ownership policies: `require claim "ownerId" matches subject` (subject = command identifier
|
|
86
89
|
or keyed query argument) or `matches <commandProperty>`; executable; renderable only for
|
|
87
|
-
text-backed targets (
|
|
90
|
+
text-backed targets at the 4.24-era Stage; Stage 4.73.1 also renders Uuid and Date claim targets (see `renderable-subset.md`; unsupported subjects: STAGE-ESM-015).
|
|
88
91
|
|
|
89
92
|
## Exact numeric source mode
|
|
90
93
|
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
- Warnings that hide defects (always validate with `--warnings-as-errors`)
|
|
6
6
|
- Source reference and identifier checks
|
|
7
7
|
- Public events and translation direction
|
|
8
|
+
- Explicit enum member numbers
|
|
8
9
|
- Named keys, production routes and observer filters
|
|
9
10
|
- Caller identity, compliance and routes
|
|
10
11
|
- Specification metadata, callers, cases and locators
|
|
@@ -53,7 +54,7 @@ Legacy compliance spellings (`@pii`/`@sensitive`) do not evade PLAY0515.
|
|
|
53
54
|
|
|
54
55
|
## Public events and translation direction
|
|
55
56
|
|
|
56
|
-
|
|
57
|
+
Source checked at Screenplay 4.135.0; all are errors. These constructs bind as released
|
|
57
58
|
ESM v9, except public/foreign imports without local shapes (PLAY0268).
|
|
58
59
|
|
|
59
60
|
| Code | Meaning / fix |
|
|
@@ -79,6 +80,24 @@ or non-Translate direction. Repair discovery uses `repair-capabilities`, workspa
|
|
|
79
80
|
`repairs`, then revision-checked `propose-repair`; do not guess a direction.
|
|
80
81
|
See automations-and-translations `references/public-events-and-direction.md`.
|
|
81
82
|
|
|
83
|
+
## Explicit enum member numbers
|
|
84
|
+
|
|
85
|
+
Source errors from Screenplay 4.137.0; ESM v12 admission from 4.139.0:
|
|
86
|
+
|
|
87
|
+
| Code | Severity | Meaning / fix |
|
|
88
|
+
| --- | --- | --- |
|
|
89
|
+
| PLAY0667 | E | Mixed numbered/unnumbered members; number all or none |
|
|
90
|
+
| PLAY0668 | E | Duplicate enum number; aliases are not supported |
|
|
91
|
+
| PLAY0669 | E | Number outside int32 (-2147483648 through 2147483647) |
|
|
92
|
+
| PLAY0670 | E | Malformed number: decimal digits, optional minus, no leading zero, fraction, exponent or plus |
|
|
93
|
+
| PLAY0671 | I | Opt-in `enum-pinning` completeness hint for an unnumbered enum used by an event property; ordinary compilation does not report it |
|
|
94
|
+
|
|
95
|
+
Numbering errors have no automatic repair. PLAY0671 suggests the opt-in
|
|
96
|
+
`propose-number-enum-members` refactoring, not a correctness repair. Member names
|
|
97
|
+
remain specification values. Non-positional pins select v12; positional pins keep
|
|
98
|
+
older executable bytes/version. Consumer admission is separate (`versions.md`).
|
|
99
|
+
Source: `v4.139.0:Documentation/screenplay/diagnostics.md`, decision 0065.
|
|
100
|
+
|
|
82
101
|
## Named keys, production routes and observer filters
|
|
83
102
|
|
|
84
103
|
| Code | Severity | Meaning / fix |
|
|
@@ -312,7 +331,7 @@ Report each as `code file:line one-line meaning`; never paste more than about 30
|
|
|
312
331
|
|
|
313
332
|
## Render admission (V5): `STAGE-*`, `CLI-RENDER-*`, `STAGE-CRATIS-*`
|
|
314
333
|
Full table with causes: `renderable-subset.md`. The Stage 4.24.x rows below
|
|
315
|
-
retain historical source/probe evidence.
|
|
334
|
+
retain historical source/probe evidence. The pinned CLI/Stage pair (`versions.md`) admits
|
|
316
335
|
through v10 to construct checks; above it is CLI-RENDER-004 (direct Stage:
|
|
317
336
|
STAGE-ESM-016). Publication STAGE-ESM-032, foreign facts/event captures 033,
|
|
318
337
|
reaction identity 034, reaction filters 035 and production overrides 036 remain
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Documentation contradictions and which side to trust
|
|
2
2
|
|
|
3
|
-
Current pins
|
|
3
|
+
Current pins: `versions.md`. This is a
|
|
4
4
|
**historical** contradiction inventory, not a claim that all listed defects still
|
|
5
5
|
exist. Current grammar documents exact numbers and free description placement;
|
|
6
6
|
sources/routes bind as ESM v8; PLAY0515 is a source error; CLI admits through
|
|
@@ -42,7 +42,7 @@ read from source or documentation.
|
|
|
42
42
|
| 14 | `$causedBy` | not evaluable (#4119), not ESM | showcase only |
|
|
43
43
|
| 15 | literal keys | `key literal "global"` vs `key "global"` | both compile; prefer `literal` |
|
|
44
44
|
| 16 | query admission | `D/queries.md:74` now says live, filtered, scoped and performer queries are not admitted | the binder also rejects collection queries and a missing `by`, which stay undocumented [probed] |
|
|
45
|
-
| 17 | `@pii` | `D/concepts.md:3,33` "Chronicle applies `@pii` and `@sensitive` rules automatically" | the binder rejects any compliance attribute (PLAY0268); keep it, report V3 blocked. `@sensitive` means an operational secret (`[Encrypted]` + `[NotAudited]`; Screenplay decision 0034); the
|
|
45
|
+
| 17 | `@pii` | `D/concepts.md:3,33` "Chronicle applies `@pii` and `@sensitive` rules automatically" | the binder rejects any compliance attribute (PLAY0268); keep it, report V3 blocked. `@sensitive` means an operational secret (`[Encrypted]` + `[NotAudited]`; Screenplay decision 0034); the historically probed tools (standalone 4.68.0, bundle 4.66.0) do **not** report `PLAY0515` (`@pii` from 4.69.1, `@sensitive` from 4.84.1): there only Chronicle catches either attribute on an event-source identifier, at build time of the generated code (CHR0034 for `@pii`, CHR0052 for `@sensitive`) |
|
|
46
46
|
| 18 | read-model identity | `D/readmodels.md:32` "from the keyed query" | at 4.135.0 explicit `key` wins; else single-instance queries agree on one read-model `by` property; only with none and an admitted list query does conventional `*Id` inference run (collection-key exclusions: read-surface `references/named-keys.md`). Queryless views need explicit `key` |
|
|
47
47
|
| 19 | `$strings` constraint messages | `D/constraints.md:31` vs `D/internationalization.md:55` | the compiler keeps the key; realization localizes |
|
|
48
48
|
| 20 | composite key braces | optional in the EBNF; both forms in docs | both fine |
|
|
@@ -55,8 +55,10 @@ read from source or documentation.
|
|
|
55
55
|
| 27 | decision index | `decisions/README.md` row 0020 shows stage `none` while v5 is implemented | the code: v5 `then no readmodel` binds |
|
|
56
56
|
| 28 | `visualize-model` kind | the tool filters on the kind "Reactor" (`McpVisualization.cs:21`) although the construct is a Reaction; its added/removed summary never counts reactions (Screenplay#379, open) | the model, not the summary |
|
|
57
57
|
| 29 | bodied reducers in Stage | cli `Documentation/reference/screenplay.md:38` says bodied reducers are unsupported (STAGE-ESM-019) | Stage 4.24 code admits pure allowlisted reducer bodies (`PureTransitionAdmission.cs`); trust the code |
|
|
58
|
-
| 30 | `cratis screenplay validate <file>` | the command reads as a document validator | file mode
|
|
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
|