@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
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
<!-- Copyright (c) Cratis. All rights reserved. -->
|
|
2
|
+
<!-- Licensed under the MIT license. See LICENSE file in the project root for full license information. -->
|
|
3
|
+
|
|
4
|
+
# Inspect a property's chain before changing it
|
|
5
|
+
|
|
6
|
+
## Contents
|
|
7
|
+
|
|
8
|
+
- Address and query
|
|
9
|
+
- Read evidence, not just a count
|
|
10
|
+
|
|
11
|
+
Screenplay 4.138.0 released property-path evidence in `find-references` and
|
|
12
|
+
`dependencies`; this guidance was checked against 4.139.0. Discover installed
|
|
13
|
+
`tools/list`: CLI 3.53.1's 4.137.0 bundle predates it. These are read-only
|
|
14
|
+
inspection tools, not a property-change planner.
|
|
15
|
+
|
|
16
|
+
## Address and query
|
|
17
|
+
|
|
18
|
+
Use `kind: "Property"`, case-sensitive. Append the member to its owner's exact
|
|
19
|
+
logical address: `Owner.member`. For an event this selects the current generation;
|
|
20
|
+
`Owner.generationN.member` selects a historical shape, whose target details carry
|
|
21
|
+
`historical: true`. Properties are not returned in declaration listings: locate
|
|
22
|
+
the owner and inspect its properties first.
|
|
23
|
+
|
|
24
|
+
On the command-surface [enum example](../../cratis-screenplay-command-surface/references/enum-numbers.md),
|
|
25
|
+
first inspect the event with `find-references`:
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"address": "Invoicing.Issuing.SendingInvoice.InvoiceSent",
|
|
30
|
+
"kind": "Event"
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
At 4.139.0 this returns two references (`produces`, `thenEvent`), with top-level
|
|
35
|
+
`totalCount: 2`, `references` and empty `ambiguous`, `incomplete`, `wrongKind`
|
|
36
|
+
arrays. The event response has no `complete` field. Query its property separately:
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"address": "Invoicing.Issuing.SendingInvoice.InvoiceSent.status",
|
|
41
|
+
"kind": "Property"
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Then query direct mapping counterparts with `dependencies`:
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"address": "Invoicing.Issuing.SendingInvoice.InvoiceSent.status",
|
|
50
|
+
"kind": "Property",
|
|
51
|
+
"direction": "outgoing"
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Both tools accept `offset`, `limit` and `expectedSourceRevision`; echo the first
|
|
56
|
+
response's `sourceRevision` on continuation pages. `dependencies` additionally
|
|
57
|
+
accepts `direction: "incoming"` (default), `descendants` and `document`. It follows
|
|
58
|
+
**direct mapping counterparts only**, not a transitive property chain or runtime
|
|
59
|
+
impact. Query each resolved counterpart separately when walking a longer chain.
|
|
60
|
+
|
|
61
|
+
## Read evidence, not just a count
|
|
62
|
+
|
|
63
|
+
`find-references` returns top-level `references`, `ambiguous`, `incomplete`,
|
|
64
|
+
`complete`, `totalCount`, `offset`, `nextOffset` and `coverage`. Ambiguous/incomplete
|
|
65
|
+
rows contain `reference` and `candidates`. `dependencies` instead has
|
|
66
|
+
`page.items`, each carrying `reference`, `resolution` and `targets`, with paging
|
|
67
|
+
inside `page`; `complete` and `coverage` stay at the top level.
|
|
68
|
+
|
|
69
|
+
Each property reference retains `owner`, `location`, `role`, `reasons` and
|
|
70
|
+
`otherEnd` (the link's resolved other end, or null). For outgoing dependencies,
|
|
71
|
+
navigate `targets`, not an assumed interpretation of `otherEnd`. Evidence roles are:
|
|
72
|
+
|
|
73
|
+
| Role | Meaning |
|
|
74
|
+
| --- | --- |
|
|
75
|
+
| `mapping-source`, `mapping-target` | Explicit production, capture append or projection mapping end |
|
|
76
|
+
| `automap` | Derived case-insensitive projection link |
|
|
77
|
+
| `condition` | Declarative condition, including query filters and policy readers |
|
|
78
|
+
| `key` | Lookup/read, projection/join/removal/parent, constraint or stream-id key |
|
|
79
|
+
| `screen-binding` | Screen/form field use |
|
|
80
|
+
| `fixture`, `assertion` | Specification/example assignment or expected value |
|
|
81
|
+
| `response` | Command response property source |
|
|
82
|
+
| `opaque` | Text names the property; code is not resolved |
|
|
83
|
+
| `unclassified` | Conservative backstop found a name occurrence outside classified links |
|
|
84
|
+
|
|
85
|
+
### Observed result on the compiled example (4.139.0)
|
|
86
|
+
|
|
87
|
+
The property `find-references` response has `success: true`, `complete: false`,
|
|
88
|
+
`totalCount: 3`, `nextOffset: null`: two resolved references (`mapping-target`
|
|
89
|
+
on the command's `status = status`, and `assertion` on `then InvoiceSent`),
|
|
90
|
+
and one `incomplete` entry. Its `reference.role` is `unclassified`, located at the
|
|
91
|
+
specification's command-input `status` assignment, with `reference.reasons`:
|
|
92
|
+
|
|
93
|
+
```json
|
|
94
|
+
["Property name occurs in referencing declaration text without a classified link."]
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Outgoing `dependencies` also reports `success: true`, `complete: false` and
|
|
98
|
+
`page.totalCount: 1`. Its resolved `page.items[0]` has a `mapping-source`
|
|
99
|
+
reference; `targets[0].address` is
|
|
100
|
+
`Invoicing.Issuing.SendingInvoice.SendInvoice.status`, while the reference's
|
|
101
|
+
`otherEnd.address` is the queried event property. The property's completeness
|
|
102
|
+
covers all indexed evidence even when the chosen direction's page has only a
|
|
103
|
+
resolved link. The workspace had `sourceSuccess: true`, no source diagnostics
|
|
104
|
+
and `readiness.executableReady: true`: compilation success does not imply
|
|
105
|
+
complete property evidence.
|
|
106
|
+
|
|
107
|
+
**`complete: false` is never a successful empty list.** Inspect every ambiguous
|
|
108
|
+
or incomplete row and its `reasons`/candidates, even when resolved `references`
|
|
109
|
+
is empty. `success` describes compilation, not completeness. Opaque occurrences,
|
|
110
|
+
unresolved counterparts, nested composite paths, legacy command reads and external
|
|
111
|
+
source items can leave incomplete evidence. The backstop counts whole-word names
|
|
112
|
+
case-insensitively in relevant typed source and comments, including quoted text;
|
|
113
|
+
same-named properties in unrelated declarations do not affect completeness.
|
|
114
|
+
External code contents and registrations remain outside coverage even with
|
|
115
|
+
`complete: true`; authored links do not prove executable admission.
|
|
116
|
+
|
|
117
|
+
Before a rename/removal: pin the revision, inspect incoming readers and outgoing
|
|
118
|
+
counterparts, page to completion, resolve uncertainties, then choose the supported
|
|
119
|
+
identity-safe edit route with the connection owner. Never infer safe deletion from
|
|
120
|
+
zero resolved hits or edit every same-named field. An event-property change still
|
|
121
|
+
needs a persisted-contract evolution decision; the catalog is not storage evidence.
|
|
122
|
+
|
|
123
|
+
Source/output authority: `v4.139.0:Documentation/screenplay/mcp/reference.md`
|
|
124
|
+
(property links), `Source/DotNET/Screenplay.Mcp/McpPropertyDependencies.cs`,
|
|
125
|
+
`McpToolSchemas.cs`, and decision 0044's released prerequisite index. The planner
|
|
126
|
+
phases in that decision are not release evidence.
|
|
@@ -148,10 +148,9 @@ Historical verified public vector and executable checks:
|
|
|
148
148
|
`cratis/stage:4.52.0` and which bundled Screenplay 4.127.0. Published since,
|
|
149
149
|
and not verified by this vector: Scene 4.17.0, Screenplay 4.133.1, Stage 4.64.0,
|
|
150
150
|
previous CLI 3.46.1 (bundling Screenplay 4.130.0, then-default Stage 4.52.0) and
|
|
151
|
-
Studio 0.152.2. Current pins
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
3.50.0/Screenplay 4.131.0 claims;
|
|
151
|
+
Studio 0.152.2. Current pins: `cratis-screenplay-toolchain/references/versions.md`.
|
|
152
|
+
Compiler claims from this `cratis` probe are 4.127.0 claims, not current
|
|
153
|
+
bundled-compiler claims;
|
|
155
154
|
- fixture root: `Source/DotNET/Screenplay.CanonicalCorpus/Corpus/ScreenComposition/v1/source/folder`
|
|
156
155
|
in the Screenplay repository;
|
|
157
156
|
- Screenplay repo tool (available checkout): `dotnet run --project Source/DotNET/Tool
|
|
@@ -35,5 +35,5 @@ SOFTWARE.
|
|
|
35
35
|
|
|
36
36
|
This skill also adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
|
|
37
37
|
(https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
|
|
38
|
-
https://nebulit.de), used with the
|
|
39
|
-
|
|
38
|
+
https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
|
|
39
|
+
material remains credited to Martin Dilger and Nebulit GmbH.
|
|
@@ -17,7 +17,7 @@ adapted to `.play` declarations (`references/provenance.md`).
|
|
|
17
17
|
## When / when not
|
|
18
18
|
- Use: P4 self-check; P5 independent review; auditing an existing or extracted model; reviewing a
|
|
19
19
|
proposal or edit request before it is applied; checking a model before rendering; checking a
|
|
20
|
-
code diff in a repository with a model for model-first drift (checklist R1).
|
|
20
|
+
code diff in a repository with a model for model-first drift (checklist R1; `conform` is structural only).
|
|
21
21
|
- Not for: changing the model (return findings; the modeler or the main session edits); writing
|
|
22
22
|
missing specs (`cratis-screenplay-scenario-coverage`); designing slices
|
|
23
23
|
(`cratis-screenplay-slice-design`); stream and invariant redesign
|
|
@@ -31,11 +31,10 @@ adapted to `.play` declarations (`references/provenance.md`).
|
|
|
31
31
|
|---|---|---|
|
|
32
32
|
| Screenplay | `v4.66.0` (`c89198b`) | MCP catalog (29 tools: `describe-application`, `search-declarations`, `dependencies`, `find-assertion-gaps`, `read-workspace`, `declaration-details`) in `Source/DotNET/Screenplay.Mcp/McpToolCatalog.cs`; diagnostics PLAY0029, PLAY0191, PLAY0268, PLAY0271, PLAY0350, PLAY0381, PLAY0469 in `Source/DotNET/Screenplay/Diagnostics/DiagnosticCodes.cs`; decision 0008 (one data subject per event) |
|
|
33
33
|
| Screenplay | `v4.127.0` | `find-specification-obligations` (SPEC001–SPEC008 authored presence), `find-modeling-smells` (SMELL001–SMELL005 advisory questions); neither proves executed behavior or complete lineage |
|
|
34
|
-
| Screenplay | `v4.131.0` | `semantic-diff` source objects and revision-pinned pages: `Source/DotNET/Screenplay.Mcp/{McpRevisionDiff,McpWorkspaces.Comparison,McpToolCatalog}.cs`, `Documentation/screenplay/mcp/reference.md`; previous CLI 3.46.1 predates these
|
|
34
|
+
| Screenplay | `v4.131.0` | `semantic-diff` source objects and revision-pinned pages: `Source/DotNET/Screenplay.Mcp/{McpRevisionDiff,McpWorkspaces.Comparison,McpToolCatalog}.cs`, `Documentation/screenplay/mcp/reference.md`; previous CLI 3.46.1 predates these |
|
|
35
35
|
| cratis CLI | `v3.28.3` | bundles Screenplay 4.66.0 and Stage 4.24.2; see the toolchain skill |
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
it here. Compilation (V1) does not establish reference execution.
|
|
37
|
+
Historical sources; pins (v4.139.0: 39 tools): toolchain `references/versions.md`. Compilation (V1) does not establish reference execution.
|
|
39
38
|
|
|
40
39
|
## Interview phase
|
|
41
40
|
Skip if the brief names the scope, the mode and the review kind.
|
|
@@ -65,7 +64,7 @@ model's behalf.
|
|
|
65
64
|
`dependencies direction=incoming` for orphans. The verdict lines are independent: a V1 pass is
|
|
66
65
|
necessary, never sufficient. Opt into completeness with `--check` or MCP
|
|
67
66
|
`checks` for bindings, input surfaces, field origins, query keys, event consumers
|
|
68
|
-
and
|
|
67
|
+
navigation and personas (PLAY0574-0576); whole-source errors skip these. Record selected families,
|
|
69
68
|
skipped status and coverage limits, never a vacuous pass. Any line without
|
|
70
69
|
evidence is "not run: reason".
|
|
71
70
|
3. **Element sweep** (phase 1, mechanical, before any judgement). One line per gated element, event,
|
|
@@ -255,10 +254,11 @@ verdict follows the rules in `references/report-template.md`.
|
|
|
255
254
|
## References (load on demand)
|
|
256
255
|
- Review public leaks, direction, complete keys and effective routes with [public/key/route checks](references/public-keys-and-routes.md).
|
|
257
256
|
- Read `references/checklist.md` when performing the element sweep and phased audit; it contains eleven phases, 89 checks, tiers and evidence sources.
|
|
258
|
-
- Read `references/anti-patterns.md` when investigating an anti-pattern signal
|
|
259
|
-
- Read `references/report-template.md` when classifying findings, deciding the verdict, writing the report or conducting a re-review
|
|
260
|
-
- Read `references/worked-example.md` when an example of the sweep, lineage or report is needed, or when checking the complete examples
|
|
257
|
+
- Read `references/anti-patterns.md` when investigating an anti-pattern signal.
|
|
258
|
+
- Read `references/report-template.md` when classifying findings, deciding the verdict, writing the report or conducting a re-review.
|
|
259
|
+
- Read `references/worked-example.md` when an example of the sweep, lineage or report is needed, or when checking the complete examples: seeded model, filled report, fixed model.
|
|
261
260
|
- Read `references/review-questions.md` when gathering evidence for subject-specific checks or distinguishing facts from views; it contains questions per subject and domain examples.
|
|
261
|
+
- Read `references/model-inventory-report.md` when asked for a read-only inventory of an existing model.
|
|
262
262
|
- Read `references/business-questions.md` when conducting the business-question pass; it contains the explainer journey method, prompts and word translation.
|
|
263
263
|
|
|
264
264
|
## Lineage
|
|
@@ -61,8 +61,8 @@ the problem, the checks it violates, the fix, all pinned to one declaration.
|
|
|
61
61
|
| Dropped construct | PLAY0029 warning; misspelled keyword or `type` inside a slice | the construct is silently ignored | C | fix the keyword; validate with warnings as errors |
|
|
62
62
|
| Missing `for` | an event production (`produces <Event>` or `produces event`) without `for`. Not operation productions: they are authorable design intent, belong to commands, and take no event `for`, tags or routing | runtimes disagree on the destination | C (executable) / D | `for <identifier>` |
|
|
63
63
|
| Unbuilt read-model field | field no projection maps and AutoMap cannot fill | always empty; not reported by the compiler | D | map it or remove it |
|
|
64
|
-
| Undeclared removal/append event | `remove with` or capture `append` names an undeclared event |
|
|
65
|
-
| Gated command invoked by a reaction without a declared actor | reaction `invokes` a command under a caller policy and has no `runs as system role "<Role>"` that satisfies the gate | the invocation carries no caller: rejected at run time | D (major) | declare `runs as system role "<Role>"` with the least-privilege role the gate admits (ESM v10, Screenplay 4.125.0;
|
|
64
|
+
| Undeclared removal/append event | `remove with` or capture `append` names an undeclared event | V1 warns (PLAY0166, a failure under warnings as errors); binding fails PLAY0273 | C (executable) / D | declare or fix the name; run V3 |
|
|
65
|
+
| Gated command invoked by a reaction without a declared actor | reaction `invokes` a command under a caller policy and has no `runs as system role "<Role>"` that satisfies the gate | the invocation carries no caller: rejected at run time | D (major) | declare `runs as system role "<Role>"` with the least-privilege role the gate admits (ESM v10, Screenplay 4.125.0; Stage 4.73.1 refuses `runsAs` with STAGE-ESM-034 and every reaction model, so gap-fill) or record another trusted-path decision - never just delete the gate. A matching `runs as system role` is the admitted trusted path, not a defect |
|
|
66
66
|
| `reads` + `produces` reaction | reaction both reads a view and produces | fails binding | C (executable) | invoke a command, or produce without reads |
|
|
67
67
|
| `reads` treated as protection | rule "checked" because the command or reaction `reads` a view | `reads` enforces nothing | D (major) | keep or introduce `reads <View>` + `require ... message` as stated intent, mark it NOT enforced in the slice `description`, name the target (`[ProtectedDecision]` + `DecisionRead<T>`, Chronicle DCB, or a constraint where it fits); checklist E3 |
|
|
68
68
|
| Caller-supplied state rule | `require currentStatus == "open"` where the caller sends `currentStatus` | the caller decides its own permission | D (major) | read the stored state with `reads`; keep or introduce `reads <View>` + `require ... message` as stated intent, mark it NOT enforced in the slice `description`, name the target (`[ProtectedDecision]` + `DecisionRead<T>`, Chronicle DCB, or a constraint where it fits); checklist E3 |
|
|
@@ -168,19 +168,19 @@ Nebulit (`provenance.md`).
|
|
|
168
168
|
| Id | Check | Evidence | Tier |
|
|
169
169
|
|---|---|---|---|
|
|
170
170
|
| G1 | Every command has at least one reachable and authorized origin, and no command is attributed to a generic "User" | screen `action`, forms, reactions, persona policies | D |
|
|
171
|
-
| G2 | Personas have a purpose and say what they cannot do; read-only roles are legitimate; every persona has at least one command or one view | `persona` descriptions | D |
|
|
171
|
+
| G2 | Personas have a purpose and say what they cannot do; read-only roles are legitimate; every persona has at least one command or one view (mechanical evidence: `--check personas`, PLAY0574 to PLAY0576) | `persona` descriptions | D |
|
|
172
172
|
| G3 | Persona policy lists cover every gate on the path (module, feature, construct) | policies | C semantics (board placement) |
|
|
173
173
|
| G4 | A command invoked by a reaction is not gated by a caller policy, unless a trusted-path decision is recorded | reactions, `authorize` | D (silent = major) |
|
|
174
174
|
| G5 | Row scoping (whose data) is part of the view, not a filter the caller supplies | queries | D |
|
|
175
175
|
| G6 | Every persona Cannot line resolves to an executable gate (`authorize` policy, or ownership `claim "x" matches subject\|<command property>`) and a `then denied` spec whose caller is synthesized with `given caller as <Persona>` or explicitly carries the effective-gate roles/claims; otherwise recorded as a gap. Persona text is intent only | personas, policies, specs | D |
|
|
176
176
|
| G7 | Every command and query under an inherited module/feature `authorize` has its own `then denied` spec; authorization shared by a feature is declared at feature/module level so new paths inherit it | policies, specs | D |
|
|
177
|
-
| G8 | Ownership
|
|
177
|
+
| G8 | Ownership/claim targets are a supported scalar (text, Uuid, Date or DateTime render; a numeric or Boolean target is always denied; other shapes and a command without exactly one identifier are STAGE-ESM-015 at Stage 4.73.1): noted | policies | C (renderable mode) |
|
|
178
178
|
|
|
179
179
|
## Phase 10. Views, queries and screens (4 checks, H1-H4)
|
|
180
180
|
| Id | Check | Evidence | Tier |
|
|
181
181
|
|---|---|---|---|
|
|
182
182
|
| H1 | Query shape follows the business view (list where people scan; lookup where they open one) | queries, screens | D |
|
|
183
|
-
| H2 | Executable scope:
|
|
183
|
+
| H2 | Executable scope: a keyed `=> RM optional` query with `by` named like a read-model property, or an unfiltered / one-`by` list (`=> RM[]`, observable too; `filter`, `scoped to`, `performer` do not bind), and the projection routes by the same identity (a `from` key or an event property, or `$eventSourceId`; `$eventSourceId` is not mandated). Renderable scope only: Stage-specific identity limits (Stage 4.73.1 renders a keyed optional snapshot lookup and observable collection queries; any other query is `STAGE-ESM-010`) | queries, projections | C (executable); C (render admission, renderable only) |
|
|
184
184
|
| H3 | One builder per read model; projection `key` only on `from` | projections | C |
|
|
185
185
|
| H4 | Screens show one actor's point of view; a form submits one command | screens, forms | D |
|
|
186
186
|
|
|
@@ -192,7 +192,7 @@ artifact is `N/A: <reason>`.
|
|
|
192
192
|
|
|
193
193
|
| Id | Check (the rejected pattern) | Signal to look for | Severity |
|
|
194
194
|
|---|---|---|---|
|
|
195
|
-
| R1 | Code-first change that silently outranks accepted model intent | behaviour added in code with no `.play` counterpart; the model edited to match existing code; the model left stale after a code change | major (critical when the code contradicts a protection) |
|
|
195
|
+
| R1 | Code-first change that silently outranks accepted model intent | behaviour added in code with no `.play` counterpart; the model edited to match existing code; the model left stale after a code change; optional structural evidence: `cratis screenplay conform <model-root> --project <path>` (CLI 3.42.0+, exit 0/1/2, exact structural addresses only, never a behavioral or V4 verdict; MSBuild runs, so a trusted clone) | major (critical when the code contradicts a protection) |
|
|
196
196
|
| R2 | A diagram, board or document in place of executable semantics | a rule only in a board note, a description or a wiki page; no property, validation, constraint or spec behind it (E8) | major |
|
|
197
197
|
| R3 | Claims of universal low-code, lossless recovery or target parity | words like "fully generated", "lossless", "any target" in a report or description | minor; major when it hides a gap |
|
|
198
198
|
| R4 | Framework machinery in the domain vocabulary (saga, aggregate, passive objects, HTTP or broker detail) or syntax wanted because a framework API is common | declarations named after saga, handler classes, topics, endpoints; a request to add language syntax to mirror a framework API | minor; major when it shapes the model |
|
package/package/corpus/skills/cratis-screenplay-model-review/references/model-inventory-report.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Model inventory report
|
|
2
|
+
|
|
3
|
+
Use this for a read-only "what is in this model and where are the gaps" report on an
|
|
4
|
+
existing, extracted or inherited `.play` model, before or without a full checklist run. It is
|
|
5
|
+
the inventory the audit pass in `SKILL.md` produces, in a fixed shape a maintainer can read
|
|
6
|
+
in a minute. It never changes the model. Adapted from Martin Dilger and Nebulit GmbH's
|
|
7
|
+
analyze-existing-model (see `provenance.md`), with board, status and placement steps replaced by
|
|
8
|
+
the Screenplay MCP views.
|
|
9
|
+
|
|
10
|
+
## Gather (read-only)
|
|
11
|
+
1. Scope. A named module narrows the report to that module; otherwise report the whole
|
|
12
|
+
model, one block per module. If the named module does not exist, say so and list the modules
|
|
13
|
+
that do.
|
|
14
|
+
2. Structure: `describe-application` (view `summary`) gives modules, features and slices by kind.
|
|
15
|
+
3. Elements: counts of `event`, `command`, `readmodel`, `screen`, `reaction` and `trigger`
|
|
16
|
+
per module from `search-declarations`; fall back to the source files when a view is
|
|
17
|
+
unavailable and say which.
|
|
18
|
+
4. Specifications: `find-assertion-gaps` for slices without an assertion; `find-specification-obligations`
|
|
19
|
+
for obligations with no matching specification. These read authored examples, not executed
|
|
20
|
+
coverage (`../../cratis-screenplay-model-authoring/references/mcp-tools.md`).
|
|
21
|
+
5. Gaps and orphans: `find-references` and `dependencies` for declarations referenced by nothing;
|
|
22
|
+
`find-modeling-smells` for the candidate shapes.
|
|
23
|
+
|
|
24
|
+
## Report
|
|
25
|
+
```
|
|
26
|
+
## Model inventory: <model root or module>
|
|
27
|
+
Inspected: <date>, Screenplay <tool version>, source identity <revision>
|
|
28
|
+
|
|
29
|
+
### Modules (n)
|
|
30
|
+
- <module>: <n> features, <n> slices
|
|
31
|
+
|
|
32
|
+
### Elements (per module)
|
|
33
|
+
| Kind | Count |
|
|
34
|
+
|---|---|
|
|
35
|
+
| event | |
|
|
36
|
+
| command | |
|
|
37
|
+
| readmodel | |
|
|
38
|
+
| screen | |
|
|
39
|
+
| reaction / trigger | |
|
|
40
|
+
| capture | |
|
|
41
|
+
|
|
42
|
+
### Specification coverage
|
|
43
|
+
- n of total slices have at least one assertion (pct)
|
|
44
|
+
- Without: <names, at most 10, then "and N more">
|
|
45
|
+
|
|
46
|
+
### Structural gaps (per slice)
|
|
47
|
+
<slice: what is missing>, or "none"
|
|
48
|
+
|
|
49
|
+
### Orphans
|
|
50
|
+
<declarations nothing references>, or "none"
|
|
51
|
+
|
|
52
|
+
### Shapes
|
|
53
|
+
<left chair, right chair, bed, shelf only as candidates that held up against the domain; see
|
|
54
|
+
anti-patterns.md>, or "none"
|
|
55
|
+
|
|
56
|
+
### Summary
|
|
57
|
+
<2 to 4 sentences: maturity, the most important gap or risk, one concrete suggestion>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Structural gaps to look for
|
|
61
|
+
| Slice kind | Expect | Flag when missing |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| StateChange | an origin (screen action, form, or reaction), a `command`, at least one `event` | any of the three |
|
|
64
|
+
| StateView | a `readmodel` with a projection (or reducer) and a `query` or screen that reads it | projection or reader |
|
|
65
|
+
| Automation | a `reaction` or `trigger` and what it produces or invokes | either |
|
|
66
|
+
| Translate | inbound: a `capture` or a translating reaction, and the private events it produces; outbound: a reaction or an event-target projection/reducer publishing the public event contract (no capture) | the direction's source or the produced or published events |
|
|
67
|
+
|
|
68
|
+
Do not flag a gap the documentation or the slice name marks intentional (an internal slice
|
|
69
|
+
with no screen). Judge unintentional gaps against the slice title, and surface only those.
|
|
70
|
+
Orphans that a documented terminal reason explains are not findings.
|
|
71
|
+
|
|
72
|
+
## Not carried over
|
|
73
|
+
Slice status counts (`Planned`, `InProgress`, `Done`) are not in the report: `.play` has no
|
|
74
|
+
status field. Delivery status lives in the GitHub issue or `STATE.md`. An orphan that a board
|
|
75
|
+
tool could not see is skipped with a note, never guessed.
|
|
@@ -12,11 +12,10 @@ MIT, Copyright (c) 2025 Straw Hat, LLC. The complete notice is in this skill's `
|
|
|
12
12
|
| `eventmodeling-validating-event-models` | `checklist.md` T (allowed and refused transitions per entity), C7 and C8 (unique semantics, corrections name what they correct), F3, G (role attribution and coverage), D and E (read models serve real queries, regenerable), `report-template.md` (critical and warning findings, completeness table) | Adapted; the command-state rule is not adopted as such (Screenplay decisions read stored state through `reads`; see `anti-patterns.md`) |
|
|
13
13
|
| `eventmodeling-checking-completeness` | `checklist.md` A (origin and destination for every field, every command input, every read-model field), A8 (step contracts), G (role coverage), `references/worked-example.md` (field-trace format) | Adapted; matrices replaced by lineage over `.play` declarations |
|
|
14
14
|
|
|
15
|
-
## Adapted closely (Martin Dilger and Nebulit GmbH
|
|
15
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
16
16
|
|
|
17
17
|
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
18
|
-
by Martin Dilger and Nebulit GmbH (https://nebulit.de)
|
|
19
|
-
is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
18
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
|
|
20
19
|
|
|
21
20
|
| Source file | Used in | How |
|
|
22
21
|
|---|---|---|
|
|
@@ -24,7 +23,7 @@ is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
|
24
23
|
| `.claude/skills/eventmodeling-designing-automation-chains/SKILL.md`: every automation needs a todo list, translation versus worker, redundant second stage, no status field, closing path, quality checklist | `checklist.md` F8 to F12 and the automation-chain audit, `report-template.md` "Automation chains", `review-questions.md` | Restored from #493 (the automation-chain audit) as review checks translated to `Automation` and `Translate` slices. Not adopted: a translation's todo list is never closed; here a translation holding real pending work needs a terminal disposition (the audit format of `cratis-screenplay-automations-and-translations`), and an artificial never-closing queue is flagged instead |
|
|
25
24
|
| `.claude/skills/eventmodeling-core-rules/SKILL.md`: Critic Mode, Flow and Causality, Open Questions vs. Decided Failures, Offline-First Thinking | `SKILL.md` "Procedure" (stance), `checklist.md` E9 and F13, `report-template.md` "Defect or business question?", `review-questions.md` | Adapted closely; the single-issuer command rule, lanes, linked copies and board mechanics are not adopted |
|
|
26
25
|
| `.claude/skills/handle-comment/SKILL.md`: one remark per node with a kind, resolving means answering | `SKILL.md` "Findings" | Adapted; the board place, resolve and delete actions are dropped, the remark is a finding pinned to one declaration |
|
|
27
|
-
| `.claude/skills/analyze-existing-model/SKILL.md`: spec coverage with names, structural gaps per slice type, summary in 2 to 4 sentences | `SKILL.md` "Audit pass", `report-template.md` Inventory |
|
|
26
|
+
| `.claude/skills/analyze-existing-model/SKILL.md`: spec coverage with names, structural gaps per slice type, summary in 2 to 4 sentences | `SKILL.md` "Audit pass", `report-template.md` Inventory, `model-inventory-report.md` (gather steps, report shape, structural-gap table) | Adapted closely; board and slice-status steps replaced by the Screenplay MCP views, slice status breakdown dropped (Screenplay has none), `validate_model` replaced by `find-modeling-smells` and `find-assertion-gaps` |
|
|
28
27
|
| `.claude/skills/eventmodeling-validating-event-models/SKILL.md`, `-checklist/SKILL.md`: event-entity mapping (Check 6.2), report with blockers and next steps, common issues, closing questions that gate the verdict | `checklist.md` B2, `report-template.md` Verdict, `review-questions.md` | Martin Dilger and Nebulit GmbH's changes to the TrogonStack base, adapted; the "exactly one issuer" and "screen wired to more than one command always fails" rules are not adopted (Screenplay commands may have several origins and a screen several actions) |
|
|
29
28
|
| `.claude/skills/eventmodeling-checking-completeness/SKILL.md`: field matrix, slice coverage, "search before calling data missing" | `checklist.md` A1 to A8 | Already adapted from the TrogonStack base (role coverage is TrogonStack's, credited above); Martin Dilger and Nebulit GmbH's slice-border and linked-copy checks are not adopted (no columns or linked copies in `.play`) |
|
|
30
29
|
|
package/package/corpus/skills/cratis-screenplay-model-review/references/public-keys-and-routes.md
CHANGED
|
@@ -16,7 +16,7 @@ Add these to the element sweep, with evidence pinned to the declaration:
|
|
|
16
16
|
- Is the view identity explicitly marked `key` or unambiguously inferred? Does each
|
|
17
17
|
single-instance query/read supply every part exactly once, with compatible types,
|
|
18
18
|
and do state fixtures contain all parts? Do PDL keys align with the view's key?
|
|
19
|
-
Composite view keys still refuse binding at 4.
|
|
19
|
+
Composite view keys still refuse binding at 4.139.0 (PLAY0268, #599); compilation
|
|
20
20
|
is not executable evidence. Read read-surface `references/named-keys.md`.
|
|
21
21
|
- Does a production override replace the whole source/stream/id route, rather than
|
|
22
22
|
assume partial inheritance? Is its `for` destination still explicit and compatible?
|
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
A small model with one seeded design defect, reviewed in critic mode. The model file is
|
|
13
13
|
`berths.play`; line numbers below refer to it. The report follows `report-template.md` and is
|
|
14
14
|
shortened: it shows the flagged checks of each phase and elides the passing ones, which a real
|
|
15
|
-
report lists in full. The model compiles
|
|
16
|
-
|
|
15
|
+
report lists in full. The model compiles and, on the standalone 4.139.0 tool, binds and runs one specification (the
|
|
16
|
+
`ListBerths` list query binds since Screenplay 4.105.0). The report works in design mode, so it
|
|
17
|
+
does not run V3 or V4.
|
|
17
18
|
|
|
18
19
|
## The model under review
|
|
19
20
|
|
|
@@ -171,7 +172,7 @@ Confidence: medium (design mode; V2 to V5 not run)
|
|
|
171
172
|
|
|
172
173
|
## After the fix
|
|
173
174
|
The same scope after the modeler applied the edit request and added denial specifications.
|
|
174
|
-
The review is re-run only on the changed scope. The query contract is unchanged: no edit request asked for a different query, so `ListBerths => BerthSummary[]` stays. This document compiles
|
|
175
|
+
The review is re-run only on the changed scope. The query contract is unchanged: no edit request asked for a different query, so `ListBerths => BerthSummary[]` stays. This document compiles and binds, and its four specifications pass in `screenplay test` (4.139.0). Replacing the list with a keyed lookup would change the contract and needs its own domain-justified edit request. Stage 4.73.1 would refuse the snapshot list (`STAGE-ESM-010`); only an `observable` list or a keyed lookup renders.
|
|
175
176
|
|
|
176
177
|
```screenplay
|
|
177
178
|
concept BerthId : Uuid
|
|
@@ -33,5 +33,5 @@ SOFTWARE.
|
|
|
33
33
|
|
|
34
34
|
This skill also adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
|
|
35
35
|
(https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
|
|
36
|
-
https://nebulit.de), used with the
|
|
37
|
-
|
|
36
|
+
https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
|
|
37
|
+
material remains credited to Martin Dilger and Nebulit GmbH.
|
|
@@ -43,7 +43,7 @@ an unproven pass.
|
|
|
43
43
|
| An accepted model covers the scope | **Model** | Change the `.play`, verify V1-V3, review, then render or gap-fill |
|
|
44
44
|
| Opted in, but this scope has no model yet | **Model** | New behavior starts in discovery, then slice design |
|
|
45
45
|
| A computed rule inside a modeled slice | **Model + code attachment** | `csharp`/`file` block; it binds only as the construct allows (`cratis-screenplay-model-authoring`) |
|
|
46
|
-
| Scope Stage cannot render yet, including every modeled automation and translation (Stage
|
|
46
|
+
| Scope Stage cannot render yet, including every modeled automation and translation (Stage 4.73.1 renders neither; the whole behavior is gap-fill, not just its outside call; a reaction that produces and invokes stays one reaction, `STAGE-ESM-037`, hand-written as one reactor on Arc 22.72.0 or later) | **Gap-fill code** | Hand-written; the `.play` slice and specs are the contract. `cratis-screenplay-render-and-gap-fill` separates an authorized existing generated base from fully hand-written delivery |
|
|
47
47
|
| Outside call, transport or credentials | **Adapter code** | `Customizations/` or the host, applying `cratis-engineering-effect-boundaries` |
|
|
48
48
|
| Infrastructure, clients, framework-profile repositories, brownfield not opted in | **Code** | Arc, Chronicle, spec and React skills; trivial changes keep the proportional-delegation policy |
|
|
49
49
|
|
|
@@ -210,10 +210,12 @@ labelled as such. The user decides whether it is enough
|
|
|
210
210
|
| Critic review, business-question pass | `cratis-screenplay-model-review` |
|
|
211
211
|
| Existing system into a model | `cratis-screenplay-legacy-extraction` |
|
|
212
212
|
| Render, gap-fill, fallback, drift | `cratis-screenplay-render-and-gap-fill` |
|
|
213
|
+
| Estimate, order or split delivery of an accepted model | `cratis-screenplay-delivery-planning` |
|
|
213
214
|
|
|
214
215
|
Construct mechanics stay in the `cratis-screenplay-*` construct skills; term clashes:
|
|
215
216
|
`references/vocabulary-map.md`; worked example: `references/worked-example.md`; done checklist: `references/phases.md`.
|
|
216
217
|
Read `references/worked-example.md` when needing an example of reasoning documentation, constraints, and decided rejections.
|
|
218
|
+
Read `references/core-rules-digest.md` when you need the one-page card of element names, causality, open-question-versus-decided-failure and the anti-patterns to reject early.
|
|
217
219
|
|
|
218
220
|
## Gate
|
|
219
221
|
Done when: the mode's "done when" holds with fresh verdict lines; every open question has an
|
|
@@ -221,13 +223,13 @@ address and assumption; every decided rejection is a specification; no protectio
|
|
|
221
223
|
the packet opens with `Outcome:`; STATE.md is current.
|
|
222
224
|
|
|
223
225
|
## Verified product sources
|
|
224
|
-
Full pin table: `cratis-screenplay-toolchain/references/versions.md`. Read `cratis-screenplay-toolchain/references/versions.md` when selecting or reverifying tool versions.
|
|
226
|
+
Full pin table: `cratis-screenplay-toolchain/references/versions.md`. Read `cratis-screenplay-toolchain/references/versions.md` when selecting or reverifying tool versions. Current pins (Stage 4.73.1, cratis CLI 3.53.1 and the rest) are in that file. Older source reads used here: Screenplay
|
|
225
227
|
`v4.66.0` (`c89198b`): `Source/DotNET/Tool/Program.cs` (`--warnaserror`, folder mode),
|
|
226
228
|
`Source/DotNET/Screenplay/Semantics/SemanticModelBinder.cs:209-216` (personas are report-only),
|
|
227
229
|
`Documentation/screenplay/{constraints,specifications}.md`, `mcp/reference.md` (`modelRevision`);
|
|
228
|
-
cratis CLI `v3.28.3` (`cratis screenplay validate --warnings-as-errors
|
|
229
|
-
|
|
230
|
-
`Documentation/reference/screenplay-mcp.md`. The worked example compiles with
|
|
230
|
+
cratis CLI `v3.28.3` (`cratis screenplay validate --warnings-as-errors`; bundled Screenplay 4.66.0 then, 4.137.0 in 3.53.1);
|
|
231
|
+
opt-in key `mcpServers.screenplay.root` in cratis CLI `v3.28.3`
|
|
232
|
+
`Documentation/reference/screenplay-mcp.md`. The 4.66.0 and 3.28.3 reads are historical, not current pins. The worked example compiles with the standalone tool.
|
|
231
233
|
## Verify
|
|
232
234
|
```shell
|
|
233
235
|
screenplay <model-folder> --warnaserror --no-color
|
package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/core-rules-digest.md
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# Core rules digest
|
|
2
|
+
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- Two postures, never mixed in one pass
|
|
6
|
+
- Elements and names
|
|
7
|
+
- Causality
|
|
8
|
+
- Roles
|
|
9
|
+
- Field lineage
|
|
10
|
+
- Open question versus decided failure
|
|
11
|
+
- Offline-first lens
|
|
12
|
+
- Anti-patterns to reject early
|
|
13
|
+
- Structural shapes (candidates)
|
|
14
|
+
- Quick self-check
|
|
15
|
+
|
|
16
|
+
A one-page card of the element, naming and causality rules that every modeling phase
|
|
17
|
+
relies on. It restates what the construct and phase skills own, in one place, so a session
|
|
18
|
+
does not reopen five skills to check a name. When this card and a construct skill differ, the
|
|
19
|
+
construct skill and the compiler win. Adapted from Martin Dilger and Nebulit GmbH's
|
|
20
|
+
eventmodeling-core-rules (see `provenance.md`), translated to `.play` constructs.
|
|
21
|
+
|
|
22
|
+
## Two postures, never mixed in one pass
|
|
23
|
+
- **Modeling.** Discovery, slice design, authoring. Build the process as completely as you can.
|
|
24
|
+
Flag a naming slip or an incomplete precondition and move on; do not stall the step on it.
|
|
25
|
+
- **Critic.** Review (`cratis-screenplay-model-review`). Apply every rule strictly and report every
|
|
26
|
+
violation; do not soften a finding because the model mostly works, and do not quietly add
|
|
27
|
+
missing structure on the model's behalf. Findings go in the report, not into the model.
|
|
28
|
+
|
|
29
|
+
A modeling pass is not the place for a full audit, and a critic pass never edits.
|
|
30
|
+
|
|
31
|
+
## Elements and names
|
|
32
|
+
| Construct | Means | Name it | Reject |
|
|
33
|
+
|---|---|---|---|
|
|
34
|
+
| `event` | A business fact that already happened; immutable; a correction is a new event | Past tense, business language: `BerthReserved`, `PaymentAuthorized` | UI or machinery: `SidebarOpened`, `ApiCalled`, `ResponseReceived` |
|
|
35
|
+
| `command` | Business intent from a caller; can be refused; on success produces one or more events | Imperative: `ReserveBerth`, `CancelSubscription` | Queries and UI actions: `LoadOrders`, `FetchData`, `OpenDialog` |
|
|
36
|
+
| `readmodel` (+ `query`) | A projection of events shaped for one question; optional for any given command | A noun phrase for the data: `BerthAvailability`, `InvoiceList` | Implementation words: `...Projector`, `...Repository` |
|
|
37
|
+
| `screen` | What a user sees and can act on | What a user would call it: `Dashboard`, `ReservationsPage` | `...Component`, `...View` internals |
|
|
38
|
+
| `reaction` / `trigger` | An automated actor reacting to an event, a clock or an application signal | What it does: `BillingScheduler`, `BerthReleaser` | Handler or service names |
|
|
39
|
+
| `persona` | A named role with Does / Reads / Cannot | A role in domain language | A generic "User" |
|
|
40
|
+
|
|
41
|
+
An event holds captured or decided facts. A running total, an average or a status that is only
|
|
42
|
+
recomputed from other events is a `readmodel`, not an event. A calculation that was actually
|
|
43
|
+
decided at a point in time (a quoted price, an approved amount) is a fact and belongs in the
|
|
44
|
+
event; say which it is.
|
|
45
|
+
|
|
46
|
+
## Causality
|
|
47
|
+
- Every locally produced event has a modeled producer that is reachable and motivated: whatever
|
|
48
|
+
the language lets produce it, for example a command or reaction `produces`, a capture, or an
|
|
49
|
+
event-target projection or reducer publishing an outbound public event. A foreign event
|
|
50
|
+
declared with `from` is produced by its owning system, not locally. The examples are not a
|
|
51
|
+
closed list; the construct skills and checklist F13 in `cratis-screenplay-model-review` decide.
|
|
52
|
+
- Every command has a reachable, authorized origin, for example a screen or form action, or a
|
|
53
|
+
reaction to an event, a clock or an application trigger (not a closed list; F13 decides). A
|
|
54
|
+
command may have several origins and a screen several actions; judge each origin on its own.
|
|
55
|
+
- A process starts at a screen or form action (a blank creation form counts), at a reaction to a
|
|
56
|
+
modeled event, a clock or application trigger, or at a capture appending outside facts; never at
|
|
57
|
+
an unmotivated command.
|
|
58
|
+
- Two state changes in a row need something that triggers the second (a screen, or a reaction).
|
|
59
|
+
- Connections read forward: what a later step needs from an earlier one is an event or a read
|
|
60
|
+
model that already exists. When a later event must change what an earlier view shows, the
|
|
61
|
+
projection of that view consumes the later event; do not draw a backward dependency.
|
|
62
|
+
- Slices connect through events and views. Common transitions: StateView to StateChange,
|
|
63
|
+
StateChange to StateView, StateChange to Automation, Automation to StateChange, Automation to
|
|
64
|
+
StateView, Translate to StateView, Translate to Automation. Judge a connection by checklist
|
|
65
|
+
F13 in `cratis-screenplay-model-review`, not by this list.
|
|
66
|
+
|
|
67
|
+
## Roles
|
|
68
|
+
Every persona has a name in domain language, what it does, what it reads, and what it cannot do,
|
|
69
|
+
and each "Cannot" is backed by an `authorize` gate and a `then denied` specification, or recorded
|
|
70
|
+
as a gap. No command is attributed to a generic "User". A persona that never acts and never reads
|
|
71
|
+
anything is decorative, not modeled. See `cratis-screenplay-discovery` `references/personas-and-causes.md`.
|
|
72
|
+
|
|
73
|
+
## Field lineage
|
|
74
|
+
Every command input, event property and read-model field has an origin (user input, caller
|
|
75
|
+
context, a prior event property, a decided derivation, or an external payload) and, where it
|
|
76
|
+
matters, a destination. A field with no origin is a gap to resolve, not a detail to fill in later.
|
|
77
|
+
See `cratis-screenplay-slice-design` `references/field-lineage.md`.
|
|
78
|
+
|
|
79
|
+
## Open question versus decided failure
|
|
80
|
+
- **Open question.** Genuinely undecided. It goes in session state (`STATE.md`) or the review
|
|
81
|
+
report and stays open until someone answers it. Resolving means answering.
|
|
82
|
+
- **Decided failure.** A rejection or error whose behavior is already decided ("payment fails,
|
|
83
|
+
refuse, no event"). Model it as a `specification` with `then error` or `then denied`. It is
|
|
84
|
+
permanent specified behavior, not a note waiting on an answer.
|
|
85
|
+
|
|
86
|
+
A decided failure left as an open note looks unresolved when it is not. When counting
|
|
87
|
+
completeness, only a genuinely unanswered question is a gap; a decided failure needs its
|
|
88
|
+
specification.
|
|
89
|
+
|
|
90
|
+
## Offline-first lens
|
|
91
|
+
Model the business process as it would run without software first: who acts, what triggers each
|
|
92
|
+
action, what information they need before acting. Question any step that exists only because of
|
|
93
|
+
the system (a loading state, a cache refresh, a session check); it is not a business step and
|
|
94
|
+
does not belong on the timeline. The anti-patterns below are what skipping this looks like.
|
|
95
|
+
|
|
96
|
+
## Anti-patterns to reject early
|
|
97
|
+
- **Data-loading commands.** `LoadOrders` is a query; model a `readmodel` and a `query`.
|
|
98
|
+
- **UI-interaction events.** `ButtonClicked` is UI state; model it only if the business cares.
|
|
99
|
+
- **Technical events.** `ApiCalled` describes machinery; find the business outcome underneath.
|
|
100
|
+
- **Recomputed events.** A value that changes whenever its source data changes is a read-model field.
|
|
101
|
+
|
|
102
|
+
## Structural shapes (candidates)
|
|
103
|
+
Check these only when the model's wiring is visible; a count over the threshold is a prompt to
|
|
104
|
+
think, not a finding.
|
|
105
|
+
- **Screen with several commands** (the bed). Check each action is a distinct decision the user
|
|
106
|
+
already made on that screen. Screenplay allows several actions on a screen; the signal is a
|
|
107
|
+
single submit that quietly settles several things.
|
|
108
|
+
- **Command with more than two events** (left chair). One business outcome that fans out, or a
|
|
109
|
+
command doing two jobs? Ask whether the events always happen together.
|
|
110
|
+
- **Read model fed by more than three events** (right chair). One coherent picture, or a view
|
|
111
|
+
answering several questions? Ask whether the fields describe one thing.
|
|
112
|
+
- **Slice with many more specifications than its neighbors** (shelf). Genuinely complex, or
|
|
113
|
+
quietly covering a neighbor's ground? Read what the extra specifications cover.
|
|
114
|
+
|
|
115
|
+
Use plain descriptions in anything a business stakeholder reads; the shape names are shorthand
|
|
116
|
+
for modelers. The full signal, consequence and fix per shape is in
|
|
117
|
+
`cratis-screenplay-model-review` `references/anti-patterns.md`.
|
|
118
|
+
|
|
119
|
+
## Quick self-check
|
|
120
|
+
- [ ] Every event is past tense and a business fact.
|
|
121
|
+
- [ ] Every command is imperative intent, not a data load.
|
|
122
|
+
- [ ] Every read model is named for its data.
|
|
123
|
+
- [ ] No event carries a value that is only recomputed from other events.
|
|
124
|
+
- [ ] Every command has a reachable, authorized origin.
|
|
125
|
+
- [ ] Every process starts at a screen or form action, a reaction, a clock or application trigger, or a capture.
|
|
126
|
+
- [ ] No two state changes are chained without a trigger between them.
|
|
127
|
+
- [ ] Every persona has a Cannot line backed by a gate and a denial specification, or a recorded gap.
|
|
128
|
+
- [ ] Every decided failure is a specification; every open question is in session state.
|
|
129
|
+
|
|
130
|
+
This is the fast pass; the full audit is `cratis-screenplay-model-review`
|
|
131
|
+
`references/checklist.md`, and the closing quality checklist is in `references/phases.md`.
|
|
@@ -127,7 +127,7 @@ phase, a decision important enough that a later reader could misread the model (
|
|
|
127
127
|
- **Input**: the accepted identity.
|
|
128
128
|
- **Carry-forward**: the admission result; render output and named gaps in `Customizations/`;
|
|
129
129
|
non-renderable scope handed to a code agent with the model as contract, plus a fallback record
|
|
130
|
-
naming the blocking codes. Automations and translations are not rendered at the pinned Stage version, so the whole behavior is gap-fill. Three cases stay distinct: admission failure (nothing rendered); an
|
|
130
|
+
naming the blocking codes. Automations and translations are not rendered at the pinned Stage version (4.73.1), so the whole behavior is gap-fill (a reaction that produces and invokes keeps its one modeled form; `STAGE-ESM-037` is Stage's refusal, not a reason to split it). Three cases stay distinct: admission failure (nothing rendered); an
|
|
131
131
|
existing generated base plus separately authorized gap-fill; fully hand-written delivery.
|
|
132
132
|
- **Gate**: V5 sub-results, or a fallback entry per non-renderable scope. A customization never
|
|
133
133
|
makes a rejected model renderable; no whole-application V5 from a subset.
|