@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
|
@@ -62,4 +62,4 @@ Write `.ai-work/screenplay/<model-slug>/STATE.md` (overwrite, untracked) only wh
|
|
|
62
62
|
|
|
63
63
|
## Lineage
|
|
64
64
|
|
|
65
|
-
The per-run protocol and the corner-cutting self-check (both by pointer to the lifecycle skill) adapt agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their
|
|
65
|
+
The per-run protocol and the corner-cutting self-check (both by pointer to the lifecycle skill) adapt agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their explicit consent.
|
|
@@ -52,4 +52,4 @@ First line: `Outcome: done | partial (...) | blocked (Qn) | out-of-scope (why)`.
|
|
|
52
52
|
|
|
53
53
|
## Lineage
|
|
54
54
|
|
|
55
|
-
The delivery discipline adapts the build prompts of agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their
|
|
55
|
+
The delivery discipline adapts the build prompts of agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their explicit consent.
|
|
@@ -52,4 +52,4 @@ First line: `Outcome: done | partial (...) | blocked (Qn) | out-of-scope (why)`.
|
|
|
52
52
|
|
|
53
53
|
## Lineage
|
|
54
54
|
|
|
55
|
-
The business-question lens adapts the "what do you think" (wdyt) skill of agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their
|
|
55
|
+
The business-question lens adapts the "what do you think" (wdyt) skill of agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their explicit consent.
|
|
@@ -102,4 +102,4 @@ Proxies now exist. Build React components from the generated proxies (`react.md`
|
|
|
102
102
|
|
|
103
103
|
## Lineage
|
|
104
104
|
|
|
105
|
-
The re-delivery, specification-oracle and working-discipline items adapt the build prompts of agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their
|
|
105
|
+
The re-delivery, specification-oracle and working-discipline items adapt the build prompts of agentic-engineer by Martin Dilger and Nebulit GmbH (https://github.com/Nebulit-GmbH/agentic-engineer, commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`; https://nebulit.de), used with their explicit consent.
|
|
@@ -205,6 +205,7 @@ and one phase skill, then the construct skill needed for syntax.
|
|
|
205
205
|
| `cratis-screenplay-legacy-extraction` | Evidence-led extraction, expert verification and loss report |
|
|
206
206
|
| `cratis-screenplay-toolchain` | Compiler and CLI versions, verdict commands, diagnostics and executable subsets |
|
|
207
207
|
| `cratis-screenplay-render-and-gap-fill` | Admission, publication, target verification and contract-led hand-written delivery |
|
|
208
|
+
| `cratis-screenplay-delivery-planning` | Slice counts by type, dependency waves, issue tracking and estimates from the team's own history |
|
|
208
209
|
|
|
209
210
|
#### Language
|
|
210
211
|
|
|
@@ -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.
|
|
@@ -115,6 +115,11 @@ one covers the slice, otherwise the agreed outline).
|
|
|
115
115
|
Change the code, or return an edit request. Do not touch test files outside the slice unless
|
|
116
116
|
told to.
|
|
117
117
|
|
|
118
|
+
Where the model is a `.play` and the code is Arc, Marten or Critter Stack, `cratis screenplay
|
|
119
|
+
conform <model-root> --project <path>` (CLI 3.42.0 or later; exit 0/1/2) adds structural drift
|
|
120
|
+
evidence: exact-address comparison of recovered declarations, never behavior or equivalence. It
|
|
121
|
+
runs MSBuild on the project (trusted clone only). It supplements, and never replaces, steps 2 to 4.
|
|
122
|
+
|
|
118
123
|
### 5. Delta delivery
|
|
119
124
|
After a model or outline change, the work list is every element and specification that
|
|
120
125
|
changed since the last delivery, including a delivery of only added specifications. Then run
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
- Automation and Translation
|
|
9
9
|
- Chronicle runtime guarantees
|
|
10
10
|
- Evidence
|
|
11
|
+
- Final verification: does the code match the contract?
|
|
11
12
|
|
|
12
13
|
Reconcile in both directions with each list. Moved here from the render workflow; it gives
|
|
13
14
|
the renderer no right to browse managed output or implement rejected semantics.
|
|
@@ -105,3 +106,14 @@ none of these. Unsupported semantics remain gap-fill scope, never hidden customi
|
|
|
105
106
|
route with real configuration. Report runner, configuration and per-specification outcomes
|
|
106
107
|
apart from integration results; skipped and unexecuted cases stay visible.
|
|
107
108
|
- Record deliberate divergences and their approval; never call them equivalent behaviour.
|
|
109
|
+
|
|
110
|
+
## Final verification: does the code match the contract?
|
|
111
|
+
The last pass before you report a slice done, as a short tick-list. It repeats the checks above in
|
|
112
|
+
the form a closing review uses; every item must hold, and the one that does not is the finding.
|
|
113
|
+
- [ ] Every contracted command field has a field in the code's command, and the command has no other: none invented, none missing
|
|
114
|
+
- [ ] Every contracted event exists with its modeled name, and every payload field is present with the modeled type
|
|
115
|
+
- [ ] Every contracted read-model property exists in the code's read model (and its storage mapping where persisted), and no other does
|
|
116
|
+
- [ ] Every contracted specification maps to an executed specification or specification family
|
|
117
|
+
- [ ] No business rule, default, filter or constraint exists in code that the contract (its documentation or specifications) does not state
|
|
118
|
+
- [ ] No field name was assumed or guessed: a name that is not in the contract is not in the code
|
|
119
|
+
- [ ] Where the contract has a specification family for the lifecycle of one view or one command, each step maps to a specification (no storyline syntax at Screenplay 4.139.0)
|
|
@@ -5,15 +5,14 @@
|
|
|
5
5
|
State Change, State View, Chronicle runtime guarantees, evidence. Now `references/checklists.md`;
|
|
6
6
|
the render workflow links here and keeps no second copy. References renamed to the corpus skills.
|
|
7
7
|
|
|
8
|
-
## Adapted closely (Martin Dilger and Nebulit GmbH
|
|
8
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
9
9
|
|
|
10
10
|
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
11
|
-
by Martin Dilger and Nebulit GmbH (https://nebulit.de)
|
|
12
|
-
is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
11
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
|
|
13
12
|
|
|
14
13
|
| Source file | Used in | How |
|
|
15
14
|
|---|---|---|
|
|
16
|
-
| `.claude/skills/build-state-change/SKILL.md`: final verification checklist (commands, events, specifications, nothing invented) | `references/checklists.md` "State Change"; `SKILL.md` steps 2-3 and "Gate" | Adapted closely; slice.json becomes the `.play` slice or agreed outline, emmett types become Arc commands and Chronicle events |
|
|
15
|
+
| `.claude/skills/build-state-change/SKILL.md`: final verification checklist (commands, events, specifications, nothing invented) | `references/checklists.md` "State Change"; `SKILL.md` steps 2-3 and "Gate" | Adapted closely; slice.json becomes the `.play` slice or agreed outline, emmett types become Arc commands and Chronicle events; the six checks are kept as the closing "Final verification" tick-list in `references/checklists.md`. Not adopted: the Emmett decide/evolve structure, `routes.ts` and the state complexity guide |
|
|
17
16
|
| `.claude/skills/build-state-view/SKILL.md`: final checklist (every field has a source, subscribed events equal modeled events, no extra columns, one test per specification) | `references/checklists.md` "State View" | Adapted closely; migration, `canHandle` and Knex items translated to read-model properties, projection sources and storage mapping; Knex connection items not adopted (Emmett specific) |
|
|
18
17
|
| `.claude/skills/build-automation/SKILL.md`: checklist (every processor implemented, command fields map only from the trigger, no invented conditions, idempotency specified, no routes, processor registered in startup and event store bootstrap verified) | `references/checklists.md` "Automation and Translation" including "Real startup participation" | Adapted closely; processor/DLQ items translated to the Chronicle reactor and its failure behavior; startup registration translated to discovery, event store and event sequence checks; `start()`/`stop()`, processor-id and `schema.migrate()` not adopted (Emmett specific) |
|
|
19
18
|
| `.build-kit/lib/backend-prompt.md`: one slice per iteration, planned can be only added specifications, the slice is always true, done criteria, escalating ambiguity, progress report, consolidated patterns, learnings filter | `references/build-prompts.md` sections 3-5; `SKILL.md` steps 4-6 and "Gate" | Restored from #493 and adapted closely; `index.json`, `progress.txt`, board status, `<promise>` sentinels, per-step progress appends, commit and merge steps, and the slice-only done gate not adopted (replaced by the result packet, the completion gate and separate git authorization) |
|
|
@@ -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.
|
package/package/corpus/skills/cratis-application-slice-specifications/references/provenance.md
CHANGED
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Lineage of the #493 additions to `cratis-application-slice-specifications`. No TrogonStack material was adapted. Nebulit material is credited below.
|
|
4
4
|
|
|
5
|
-
## Adapted closely (Martin Dilger and Nebulit GmbH
|
|
5
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
6
6
|
|
|
7
7
|
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
8
|
-
by Martin Dilger and Nebulit GmbH (https://nebulit.de)
|
|
9
|
-
is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
8
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
|
|
10
9
|
|
|
11
10
|
| Source file | Used in | How |
|
|
12
11
|
|---|---|---|
|
|
@@ -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.
|
|
@@ -7,11 +7,10 @@ No TrogonStack text is adapted in this skill. Nebulit material is credited in th
|
|
|
7
7
|
| Component APIs, props and hooks | Cratis Components 4.6.0 and Arc, see *Verified product sources* | MIT | original | SKILL.md, references/ |
|
|
8
8
|
| Screenplay and Stage facts in the screen mapping | Cratis/Screenplay v4.66.0 and Cratis/Stage v4.24.0 documentation and source | MIT | original | references/from-screenplay.md |
|
|
9
9
|
|
|
10
|
-
## Adapted closely (Martin Dilger and Nebulit GmbH
|
|
10
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
11
11
|
|
|
12
12
|
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
13
|
-
by Martin Dilger and Nebulit GmbH (https://nebulit.de)
|
|
14
|
-
is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
13
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
|
|
15
14
|
|
|
16
15
|
| Source file | Used in | How |
|
|
17
16
|
|---|---|---|
|
|
@@ -37,12 +37,14 @@ and the request is wiring or a narrow fix.
|
|
|
37
37
|
|
|
38
38
|
## Verified product sources
|
|
39
39
|
|
|
40
|
-
This skill
|
|
40
|
+
This skill was originally verified against Chronicle 18.3.0 and re-read against Chronicle 19.50.0
|
|
41
|
+
(`Source/Clients/DotNET.CodeAnalysis/DiagnosticIds.cs`, `ProtectedValues/EncryptedAttribute.cs`).
|
|
42
|
+
Current version pins: `cratis-screenplay-toolchain` `references/versions.md`.
|
|
41
43
|
|
|
42
|
-
| Package |
|
|
43
|
-
| --- | --- |
|
|
44
|
-
| `Cratis.Chronicle` |
|
|
45
|
-
| `Cratis.Chronicle.CodeAnalysis` | `
|
|
44
|
+
| Package | Purpose |
|
|
45
|
+
| --- | --- |
|
|
46
|
+
| `Cratis.Chronicle` | event types, event-source identities, subjects, `[PII]`, `[Encrypted]` |
|
|
47
|
+
| `Cratis.Chronicle.CodeAnalysis` | `CHR0012`, `CHR0026`, `CHR0034`, `CHR0035`, `CHR0052` |
|
|
46
48
|
|
|
47
49
|
Reverify product sources before claiming support for another version.
|
|
48
50
|
|
|
@@ -132,7 +134,11 @@ operates on the subject and the subject follows the stream.
|
|
|
132
134
|
already both, and analyzer `CHR0026` says so.
|
|
133
135
|
- Bearer tokens, magic links, and signed URLs are not durable facts. Model a
|
|
134
136
|
keyed hash or an opaque reference, never the secret. Chronicle has no attribute
|
|
135
|
-
that withholds a value from the log.
|
|
137
|
+
that withholds a value from the log. Where an operational secret must genuinely be
|
|
138
|
+
retained (an API key, a signing secret), mark it `[Encrypted]` (encrypted at rest,
|
|
139
|
+
recoverable, not a PII erasure subject; never on a `[PII]` value or an event-source id)
|
|
140
|
+
and keep it out of the causation chain with Arc's `[NotAudited]`; see `cratis-arc-command`
|
|
141
|
+
and `cratis-chronicle-compliance`.
|
|
136
142
|
|
|
137
143
|
If a subject boundary cannot be made person-level without changing product
|
|
138
144
|
behavior, **stop and surface that trade-off** before implementing.
|
|
@@ -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.
|
|
@@ -322,7 +322,9 @@ public class <ReactorName> : IReactor
|
|
|
322
322
|
|
|
323
323
|
A reactor runs with **no principal**; `[ExecuteCommandsAsSystem]` (class-level,
|
|
324
324
|
`Cratis.Arc.Chronicle.Reactors`) supplies one for the **returned** commands only.
|
|
325
|
-
A collection return is executed as commands when every element is a command.
|
|
325
|
+
A collection return is executed as commands when every element is a command. A stable collection mixing registered events and commands (Arc 22.72.0+; Arc 22.68.0's handler needs every element to be a command) appends the events
|
|
326
|
+
first as one batch, then runs the commands in order, with no transaction across them; a retry can
|
|
327
|
+
repeat both. `[ExecuteCommandsAsSystem]` covers only the commands.
|
|
326
328
|
A reactor retry can execute the command's operations again; inline operations
|
|
327
329
|
are not a substitute for reactor/outbox durability (see
|
|
328
330
|
`cratis-arc-command-operation`, verified at Arc v22.48.1).
|
|
@@ -408,4 +410,5 @@ scope of these scenario-only guards.
|
|
|
408
410
|
|
|
409
411
|
## Lineage
|
|
410
412
|
|
|
411
|
-
|
|
413
|
+
Attribution and verification sources: `references/provenance.md`.
|
|
414
|
+
Read `references/slice-delivery-checklist.md` when delivering a reactor from a slice contract: build order, handler patterns, closing checklist.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# Provenance
|
|
2
2
|
|
|
3
|
-
## Adapted closely (Martin Dilger and Nebulit GmbH
|
|
3
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
4
4
|
|
|
5
5
|
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
6
|
-
by Martin Dilger and Nebulit GmbH (https://nebulit.de)
|
|
7
|
-
is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
6
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
|
|
8
7
|
|
|
9
8
|
| Source file | Used in | How |
|
|
10
9
|
|---|---|---|
|
|
11
10
|
| `.claude/skills/build-automation/SKILL.md`: reactor checklist: output fields traced to a stated source, skip conditions stated in the contract, repeated-input cases | `SKILL.md` "Specifications" and "Verify" | idea; our own wording kept |
|
|
11
|
+
| `.claude/skills/build-automation/SKILL.md`: read the slice definition first as the source of truth, build the command handler before the processor, single / conditional / multiple-command processor patterns, no route for an automation, closing checklist (no invented mappings, no invented filters, no guessed fields, idempotency of the command) | `references/slice-delivery-checklist.md` | Adapted closely as an `IReactor` delivery checklist: processors became reactor handlers returning commands or events, the storyline-derived test note became a separate reactor mapping specification. Not adopted: the Emmett reactor, `processor.ts`, processor id, lock and retry configuration, the dead-letter store, `schema.migrate()`, Postgres event store bootstrap, and "no dedicated reactor test" (the field mapping is the contract here) |
|
|
12
12
|
|
|
13
13
|
The `WithStrictEventSubscription()` scope statement and the scenario sequence-number behavior are verified against Chronicle `v19.32.0` source (`Source/Clients/Testing/ReadModels/ReadModelScenario.cs`, `Source/Clients/Testing/Reactors/ReactorScenario.cs`).
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Automation slice delivery checklist
|
|
2
|
+
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- Start from the contract
|
|
6
|
+
- Build order
|
|
7
|
+
- Handler patterns
|
|
8
|
+
- What no longer applies
|
|
9
|
+
- Checklist
|
|
10
|
+
- Specifications
|
|
11
|
+
|
|
12
|
+
Use this when you implement a reactor from an existing contract: an accepted `.play`
|
|
13
|
+
`Automation` slice (a `reaction` with its `when`, `where`, `invokes` or `produces`), or an agreed
|
|
14
|
+
slice outline in a code-first repository. It is the delivery checklist for the code, and it adds
|
|
15
|
+
to the Verify list in `SKILL.md`; it does not replace it. Adapted from Martin Dilger and Nebulit
|
|
16
|
+
GmbH's build-automation (see `provenance.md`), with the event-store, processor and storage
|
|
17
|
+
mechanics replaced by Chronicle and Arc.
|
|
18
|
+
|
|
19
|
+
## Start from the contract
|
|
20
|
+
Read the slice first. It is the source of truth for three things and nothing else is assumed:
|
|
21
|
+
- which event (or clock or trigger) sets the automation off;
|
|
22
|
+
- which command it invokes, or which events it produces, and from which trigger fields each
|
|
23
|
+
input is filled;
|
|
24
|
+
- which conditions narrow it (`where`).
|
|
25
|
+
|
|
26
|
+
If an item the reactor needs is not in the contract, it is not in the code. Ask or record an open
|
|
27
|
+
question; do not guess a mapping or add a filter. Notes in the slice `description` and
|
|
28
|
+
`documentation` are implementation hints: carry them into code comments, validation or
|
|
29
|
+
specifications where they add value, and do not treat them as new requirements.
|
|
30
|
+
|
|
31
|
+
## Build order
|
|
32
|
+
This checklist covers event-triggered reactions only. Clock and application triggers are not
|
|
33
|
+
`[EventType]`s and do not run through `IReactor` (Chronicle 19.50.0 discovers handlers only for
|
|
34
|
+
registered event types). Route them first to a scheduler or host-signal implementation as
|
|
35
|
+
`cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md` describes, then apply the
|
|
36
|
+
remaining steps where they fit.
|
|
37
|
+
|
|
38
|
+
An automation is a state-change with a trigger in front of it. Build the command side first, then
|
|
39
|
+
wire the reactor.
|
|
40
|
+
1. The command (and its event) exists and works: `cratis-arc-command`, and its specifications
|
|
41
|
+
(`cratis-application-slice-specifications`). If the automation produces events directly, the
|
|
42
|
+
`[EventType]` records exist instead.
|
|
43
|
+
2. The trigger event is defined as an `[EventType]` in the contracts project that owns it. A
|
|
44
|
+
trigger from another module or store is consumed through its public contract, never copied
|
|
45
|
+
(the cross-service rules in `SKILL.md`).
|
|
46
|
+
3. Write the reactor: one class implementing `IReactor`, one handler per trigger event, no
|
|
47
|
+
state. It is discovered by the interface; there is no registration step to add.
|
|
48
|
+
4. Add the specifications (below) and run the slice's gate.
|
|
49
|
+
|
|
50
|
+
The reactor has no route of its own. The invoked model-bound `[Command]` keeps its generated Arc
|
|
51
|
+
HTTP endpoint, so if only the automation should run it, gate it with `[Roles]` or `[Authorize]` and
|
|
52
|
+
give the reactor `[ExecuteCommandsAsSystem]` naming that role.
|
|
53
|
+
|
|
54
|
+
## Handler patterns
|
|
55
|
+
| Contract says | Handler |
|
|
56
|
+
|---|---|
|
|
57
|
+
| One trigger event, one command | One handler whose first parameter is the trigger event, returning the command built from the trigger's fields. Add `[ExecuteCommandsAsSystem]` only when the command is gated, and `[OnceOnly]` |
|
|
58
|
+
| One trigger event, several commands | Return the commands as a collection: Arc runs them in order, with no transaction across them, and a retry can repeat them (see "Invoking a command from a reactor") |
|
|
59
|
+
| One trigger, events and commands | Return one stable collection mixing registered events and commands (Arc 22.72.0 or later): the events are appended first as one batch, then the commands run in order, with no transaction across them. Add `[OnceOnly]` where a replay must not repeat it. The Stage 4.73.1 scaffold pins Arc 22.68.0, so this needs a proven dependency override; never split the modeled reaction |
|
|
60
|
+
| One trigger event, events produced directly | Return the event or events; `[OnceOnly]` applies (`CHR0022`) |
|
|
61
|
+
| A condition narrows the trigger | Realize exactly the stated `where`. Show it with one specification where it skips and one for the neighboring case where it acts |
|
|
62
|
+
| A fact on another event source | `EventForEventSourceId` with the stated target id |
|
|
63
|
+
| The trigger's fields are not enough | Inject the read model the contract names; do not widen the mapping |
|
|
64
|
+
|
|
65
|
+
Which return shape expresses "do nothing" for a given handler is established by a scenario that
|
|
66
|
+
runs it, not assumed. Use only the return shapes listed in `SKILL.md`.
|
|
67
|
+
|
|
68
|
+
## What no longer applies
|
|
69
|
+
Processor identity strings, consumer instance ids, lock and retry configuration, a dead-letter
|
|
70
|
+
store, `schema.migrate()` and a hand-written start and stop call belong to a different runtime.
|
|
71
|
+
Chronicle owns delivery, retry, partition failure and quarantine; see "Failure behavior". Do not
|
|
72
|
+
write a dead-letter table or catch-and-continue around the handler: a swallowed failure is a lost
|
|
73
|
+
fact, not handled (`references/domain-failures.md`).
|
|
74
|
+
|
|
75
|
+
## Checklist
|
|
76
|
+
- [ ] The slice contract was read first and every trigger, condition, command and field came from it
|
|
77
|
+
- [ ] The trigger event is an `[EventType]` from the owning contracts project
|
|
78
|
+
- [ ] The command (or events) it fires exists and has its own specifications
|
|
79
|
+
- [ ] One handler per trigger event; first parameter is the trigger; no `ReactorSideEffect`, no injected `IEventLog`
|
|
80
|
+
- [ ] Every command or event field is mapped from the trigger, an injected read model or a stated mapping; none invented or defaulted
|
|
81
|
+
- [ ] Every skip condition is the contract's, with a specification on each side of it
|
|
82
|
+
- [ ] Handlers that return events or commands carry `[OnceOnly]`; the effect is idempotent regardless
|
|
83
|
+
- [ ] A gated command has `[ExecuteCommandsAsSystem]` naming the role the command requires
|
|
84
|
+
- [ ] Repeated delivery of the same trigger is specified (what happens when it fires twice)
|
|
85
|
+
- [ ] A modeled slice matches its `.play` contract; the model was not edited to fit the code
|
|
86
|
+
- [ ] The reactor has no route; a command meant only for the automation is gated and the reactor runs it as that role; no processor or lock configuration, no dead-letter store
|
|
87
|
+
- [ ] The build has no `CHR0004`, `CHR0005`, `CHR0008`, `CHR0013`, `CHR0022`, `CHR0031` or `CHR0032` outstanding and the specifications pass
|
|
88
|
+
|
|
89
|
+
## Specifications
|
|
90
|
+
The trigger-to-command field mapping is part of the contract, so give it its own specification (a
|
|
91
|
+
direct call asserting the returned command, or a `ReactorScenario` where wiring matters). The
|
|
92
|
+
command's own `CommandScenario` covers the command side separately; neither replaces the other.
|
|
93
|
+
Details: `references/specifications.md`.
|
|
@@ -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.
|
|
@@ -204,7 +204,7 @@ one, derive it from the projection and say so. Then check each line:
|
|
|
204
204
|
## Lineage
|
|
205
205
|
|
|
206
206
|
Step 6 is adapted in our own words from ideas recorded in `references/provenance.md`.
|
|
207
|
-
Read `references/
|
|
207
|
+
Read `references/view-lifecycle-checks.md` when delivering a read model from a contract: population, update and removal checks per property and event.
|
|
208
208
|
|
|
209
209
|
## What breaks
|
|
210
210
|
|
package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/provenance.md
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
Lineage of the #493 additions to `cratis-chronicle-read-model-specifications`. No TrogonStack material was adapted. Nebulit material is credited below.
|
|
4
4
|
|
|
5
|
-
## Adapted closely (Martin Dilger and Nebulit GmbH
|
|
5
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
6
6
|
|
|
7
7
|
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
8
|
-
by Martin Dilger and Nebulit GmbH (https://nebulit.de)
|
|
9
|
-
is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
8
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
|
|
10
9
|
|
|
11
10
|
| Source file | Used in | How |
|
|
12
11
|
|---|---|---|
|
|
13
12
|
| `.claude/skills/build-state-view/SKILL.md`: checklist: every field asserted, every event covered, empty-list case | `SKILL.md` Step 6 | idea; our own wording kept |
|
|
13
|
+
| `.claude/skills/build-state-view/SKILL.md`: one specification per contract specification, population on the first event, removal on the end event, assertions on the materialized state, optional storyline-derived read-model chain tests | `references/view-lifecycle-checks.md` | Adapted closely as population, update and removal checks over `ReadModelScenario<TReadModel>`; the partial-update and several-instance checks are ours. Not adopted: SQL insert, update and delete operation patterns, Flyway migrations, `PostgreSQLProjectionSpec` with Testcontainers, route creation and wiring; storyline-derived tests wait for storyline syntax (Screenplay#394), lifecycle spec families stand in |
|
|
14
14
|
|
|
15
15
|
The strict-subscription reconciliation is original to Cratis and verified against Chronicle v18.3.0 and v19.32.0.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# View lifecycle checks
|
|
2
|
+
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- How to use this list
|
|
6
|
+
- Population
|
|
7
|
+
- Update
|
|
8
|
+
- Removal
|
|
9
|
+
- Empty and several-instance cases
|
|
10
|
+
- Closing checklist
|
|
11
|
+
|
|
12
|
+
Step 6 of `SKILL.md` gives the coverage inventory. This reference expands its three lifecycle
|
|
13
|
+
questions (does the first event populate, does a later event update, does an end event remove)
|
|
14
|
+
into checks you can tick per read model. Use it for each StateView slice you deliver. Adapted from
|
|
15
|
+
Martin Dilger and Nebulit GmbH's build-state-view (see `provenance.md`), with the SQL operations,
|
|
16
|
+
migrations and projection specification harness replaced by `ReadModelScenario<TReadModel>`.
|
|
17
|
+
|
|
18
|
+
Take the contract first (the `.play` read model, its projection and its specifications, or the
|
|
19
|
+
agreed outline). Write one specification per contract specification, using its example values, and
|
|
20
|
+
add the cases below only where the contract states the behavior; an uncontracted rule found in the
|
|
21
|
+
projection is a proposal for the contract, not silent coverage.
|
|
22
|
+
|
|
23
|
+
## How to use this list
|
|
24
|
+
For each read model, list its properties and its events in a small table (property, events that
|
|
25
|
+
set it, events that clear it). Walk the three lifecycle stages against it. A cell with no
|
|
26
|
+
specification is a gap to fix or to report.
|
|
27
|
+
|
|
28
|
+
## Population
|
|
29
|
+
The first event creates the instance with the properties it sets.
|
|
30
|
+
- Seed only that event (`Given.ForEventSource(id).Events(first)`) and assert each property it sets.
|
|
31
|
+
- Assert the key: the instance is the one for that event source (or for the contract's key
|
|
32
|
+
property). Check the key resolution before the property mapping when `Instance` is `null`.
|
|
33
|
+
- Assert a property the event does not set stays at its default; do not assert a value the
|
|
34
|
+
contract does not state.
|
|
35
|
+
- Cover every event that can create the instance if the contract has more than one.
|
|
36
|
+
|
|
37
|
+
## Update
|
|
38
|
+
A later event changes the instance.
|
|
39
|
+
- Seed the first event, then the update event, in that order, and assert the changed property
|
|
40
|
+
has its new value.
|
|
41
|
+
- Assert every property the update event does **not** set is unchanged. A partial update that
|
|
42
|
+
clears or overwrites other fields is the common defect; AutoMap can wire an identically named
|
|
43
|
+
property of another event over an explicit setter, so look at the property the event was not
|
|
44
|
+
meant to touch.
|
|
45
|
+
- Cover each event that updates the view, with the contract's example value for each.
|
|
46
|
+
- Where several events set the same property, specify the order that matters and the last-writer
|
|
47
|
+
outcome the contract states.
|
|
48
|
+
- For a child collection, assert the child is added, updated in place, and that siblings stay
|
|
49
|
+
intact.
|
|
50
|
+
|
|
51
|
+
## Removal
|
|
52
|
+
An end event removes the instance, or clears a property or a child.
|
|
53
|
+
- Seed the creating event and the removing event, then assert absence: `Instance` is `null`, or
|
|
54
|
+
the child is gone from the collection. Absence is a result, not a skipped case.
|
|
55
|
+
- Assert a view that must keep ended items does not remove them but sets the contract's status
|
|
56
|
+
value, and that the removal event does not delete other instances.
|
|
57
|
+
- A suite where every specification only adds is green and untested for removal; add the end
|
|
58
|
+
event for each removal in the contract.
|
|
59
|
+
|
|
60
|
+
## Empty and several-instance cases
|
|
61
|
+
- **Empty.** With no matching events `Instance` is `null` (the empty initial state, or the
|
|
62
|
+
baseline you passed to the scenario). Assert it where "no result" is a behavior the contract
|
|
63
|
+
states, such as a list with no rows.
|
|
64
|
+
- **Several instances.** Where a view holds one row per source, seed two event sources and use
|
|
65
|
+
`InstanceForEventSourceId(id)` or `Instances`; a single `Instance` would throw
|
|
66
|
+
`MultipleInstancesMaterialized`. Assert that one source's events do not touch the other's row.
|
|
67
|
+
- **Subscribed events.** The events your specifications seed, the projection's subscriptions and
|
|
68
|
+
the contract's events agree in both directions; report any difference to
|
|
69
|
+
`cratis-application-slice-conformance`.
|
|
70
|
+
|
|
71
|
+
## Closing checklist
|
|
72
|
+
- [ ] Every read-model property is asserted in at least one specification
|
|
73
|
+
- [ ] Every creating event has a population specification asserting the properties it sets and the key
|
|
74
|
+
- [ ] Every updating event has a specification, and the properties it does not set are asserted unchanged
|
|
75
|
+
- [ ] Every removal or clearing event has a specification asserting absence
|
|
76
|
+
- [ ] The empty case and, where the view holds many rows, a two-source case are specified when the contract states them
|
|
77
|
+
- [ ] Example values and relationships come from the contract; fresh identifiers only where isolation needs them
|
|
78
|
+
- [ ] No property, column or event beyond the contract's read model appears in the code or the specifications
|
|
79
|
+
- [ ] Each new specification was seen to fail once (drop a seeded event, confirm the assertion goes red)
|
|
@@ -1,2 +1,9 @@
|
|
|
1
1
|
Copyright (c) Cratis. All rights reserved.
|
|
2
2
|
Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
3
|
+
|
|
4
|
+
Third-party notices
|
|
5
|
+
|
|
6
|
+
This skill adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
|
|
7
|
+
(https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
|
|
8
|
+
https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
|
|
9
|
+
material remains credited to Martin Dilger and Nebulit GmbH. See references/provenance.md.
|
|
@@ -19,8 +19,10 @@ and later). The grammar is owned by Mermaid, and
|
|
|
19
19
|
file and Mermaid disagree. Confirm the Mermaid version available to the renderer
|
|
20
20
|
before relying on a construct.
|
|
21
21
|
|
|
22
|
-
The Cratis artifacts a diagram refers to
|
|
23
|
-
|
|
22
|
+
The Cratis artifacts a diagram refers to were originally checked against `Cratis.Chronicle`
|
|
23
|
+
18.3.0 and re-read against Chronicle 19.50.0 and the Arc query and command surface it is used with
|
|
24
|
+
(current pins: `cratis-screenplay-toolchain` `references/versions.md`). The Mermaid claim above is
|
|
25
|
+
external and was not re-verified here.
|
|
24
26
|
|
|
25
27
|
## What an event model is
|
|
26
28
|
|
|
@@ -100,6 +102,26 @@ tf 12 evt <EntityName><PastTenseVerb>
|
|
|
100
102
|
- Several consumers of one read model: declare each consumer `ui` as its own
|
|
101
103
|
`rf` frame with an explicit `->>` back to the `rmo`.
|
|
102
104
|
|
|
105
|
+
## Connections read forward
|
|
106
|
+
|
|
107
|
+
A diagram reads left to right, so every connection goes to a later frame, never back to an
|
|
108
|
+
earlier one. In practice:
|
|
109
|
+
|
|
110
|
+
- Number frames in story order and put elements that belong together next to each other: a
|
|
111
|
+
persona and the command it issues, a command and the events it produces, an event and the
|
|
112
|
+
read model that projects it. A read model's `->>` sources are frames that come **before** it.
|
|
113
|
+
- When a later event must change what an earlier read model shows, do not draw an arrow back to
|
|
114
|
+
that read model. Draw a new `rmo` frame after the later event, sourced from the events that now
|
|
115
|
+
matter (it is the same read model carried to a later state), and give it its own consumer
|
|
116
|
+
`ui` frame if a person looks at it. The earlier frame stays as it was: it correctly showed
|
|
117
|
+
that earlier point in the story. The model itself is unchanged; its projection simply
|
|
118
|
+
consumes the later event.
|
|
119
|
+
- If the natural place for a frame is already taken, insert it just before or after rather than
|
|
120
|
+
wiring across the gap.
|
|
121
|
+
|
|
122
|
+
Adapted from Martin Dilger and Nebulit GmbH's core rules (`references/provenance.md`); their
|
|
123
|
+
board mechanics (columns, cells, linked copies) do not apply to Mermaid frames.
|
|
124
|
+
|
|
103
125
|
## The command rules table
|
|
104
126
|
|
|
105
127
|
Mermaid's eventmodeling grammar has no shape for validation or guards. After the
|
|
@@ -166,3 +188,5 @@ language. Include commands that emit no event.
|
|
|
166
188
|
for a hand-written Chronicle implementation, or
|
|
167
189
|
`cratis-screenplay-event-modeling` when the model is authored as a Screenplay
|
|
168
190
|
`.play` document.
|
|
191
|
+
|
|
192
|
+
Attribution for adapted method text: `references/provenance.md`.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Provenance
|
|
2
|
+
|
|
3
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
4
|
+
|
|
5
|
+
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
6
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger
|
|
7
|
+
and Nebulit GmbH. The notice is in this skill's `LICENSE`.
|
|
8
|
+
|
|
9
|
+
| Source file | Used in | How |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `.claude/skills/eventmodeling-core-rules/SKILL.md`: "Connections Read Forward" and "Updating a Read Model That Already Feeds a Screen" | `SKILL.md` "Connections read forward" | Adapted closely; board columns, cells, linked copies and `link_element` dropped; the later-state read model becomes a later `rmo` frame in the Mermaid diagram |
|
|
12
|
+
|
|
13
|
+
Not adopted: lanes and the four-row column layout, placement mechanics, single-issuer commands (Mermaid frames
|
|
14
|
+
carry no such rule, and Screenplay commands may have several origins).
|
|
15
|
+
|
|
16
|
+
## Other lineage
|
|
17
|
+
|
|
18
|
+
- Mermaid `eventmodeling` diagram type: https://mermaid.js.org/syntax/eventmodeling.html.
|
|
19
|
+
- Event Modeling (Adam Dymitruk) and Martin Dilger, *Understanding Eventsourcing*: the timeline as left-to-right business flow.
|
|
@@ -29,5 +29,5 @@ SOFTWARE.
|
|
|
29
29
|
|
|
30
30
|
This skill also adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
|
|
31
31
|
(https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
|
|
32
|
-
https://nebulit.de), used with the
|
|
33
|
-
|
|
32
|
+
https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
|
|
33
|
+
material remains credited to Martin Dilger and Nebulit GmbH.
|
|
@@ -28,9 +28,9 @@ identity, effect and pending-work contract at that point; do not postpone it to
|
|
|
28
28
|
|
|
29
29
|
## Tool and realization facts (read before promising anything)
|
|
30
30
|
- Reactions, clocks, triggers, captures and Automation/Translate slices compile (V1) and bind (V3)
|
|
31
|
-
on Screenplay 4.61 or later: the standalone tool and the cratis CLI 3.28.2 or later (
|
|
32
|
-
4.
|
|
33
|
-
(4.60.1)
|
|
31
|
+
on Screenplay 4.61 or later: the standalone tool and the cratis CLI 3.28.2 or later (3.53.1
|
|
32
|
+
bundles 4.137.0). Probed on 3.28.2: the complete examples are `executableReady`. A cratis bundle before 3.28.2
|
|
33
|
+
(4.60.1) reported PLAY0268 at binding: report "V3 blocked: PLAY0268 (ESM v6)" and
|
|
34
34
|
name the tool, never remove them.
|
|
35
35
|
- Standalone 4.125.0 runs admitted scenarios through `screenplay test` or MCP
|
|
36
36
|
`run-specifications`; source validation and render publication do not run V4.
|
|
@@ -40,8 +40,8 @@ identity, effect and pending-work contract at that point; do not postpone it to
|
|
|
40
40
|
- Reaction `runs as system role "<Role>"` declares an invocation actor (ESM v10).
|
|
41
41
|
Without it the invoke has no caller. Historical CLI 3.41.0's 4.114.0 compiler
|
|
42
42
|
rejected the syntax (PLAY0137); previous CLI 3.46.1 refused ESM v10
|
|
43
|
-
at render admission (CLI-RENDER-004).
|
|
44
|
-
construct admission, which still refuses reaction identity (STAGE-ESM-034). Checked model/diagnostics: captures-and-reactions
|
|
43
|
+
at render admission (CLI-RENDER-004). The pinned CLI/Stage pair (toolchain
|
|
44
|
+
`references/versions.md`) reaches construct admission, which still refuses reaction identity (STAGE-ESM-034). Checked model/diagnostics: captures-and-reactions
|
|
45
45
|
`references/invocation-identity.md`.
|
|
46
46
|
|
|
47
47
|
## Effect guarantees and recovery traps
|
|
@@ -71,13 +71,17 @@ even when it blocks binding. Never record bearer tokens, magic links or signed U
|
|
|
71
71
|
(a keyed hash or reference at most), and never put PII on the event-source id.
|
|
72
72
|
|
|
73
73
|
## Verified product sources
|
|
74
|
+
Current pins: toolchain `references/versions.md`. Language claims were re-read at Screenplay v4.139.0,
|
|
75
|
+
renderer claims at Stage v4.73.1 (no Automation, Translate, reaction or capture: `STAGE-ESM-024`), the
|
|
76
|
+
runtime facts at Arc v22.72.0 and Chronicle v19.50.0. Older reads kept as history:
|
|
77
|
+
|
|
74
78
|
| Package | Version | Used for |
|
|
75
79
|
| --- | --- | --- |
|
|
76
80
|
| Screenplay | v4.66.0 (`c89198b`) | `Documentation/screenplay/{reactions,captures,triggers,specifications,diagnostics}.md`; examples compiled with the standalone tool |
|
|
77
|
-
| cratis CLI | v3.28.3 |
|
|
78
|
-
| Stage | v4.24.2 |
|
|
79
|
-
| Arc | v22.50.5 | `ExecuteCommandsAsSystemAttribute` (since v20.56.0) |
|
|
80
|
-
| Chronicle | v19.32.0 | `OnceOnlyAttribute`, `ReactorDelivery` and `Documentation/reactors/delivery-identity.mdx` |
|
|
81
|
+
| cratis CLI | v3.28.3 | bundled Screenplay 4.66.0 and Stage 4.24.2 (before 3.28.2: 4.60.1, which gave PLAY0268 on v6 constructs and a false PLAY0285 on cascades, cli#242) |
|
|
82
|
+
| Stage | v4.24.2 | admitted ESM v1 to v4; rendered no Automation or Translate slice |
|
|
83
|
+
| Arc | v22.72.0 (read; v22.50.5 earlier) | `ExecuteCommandsAsSystemAttribute` (since v20.56.0); mixed events-and-commands reactor returns (since v22.72.0) |
|
|
84
|
+
| Chronicle | v19.50.0 (read; v19.32.0 earlier) | `OnceOnlyAttribute`, `ReactorDelivery` and `Documentation/reactors/delivery-identity.mdx` |
|
|
81
85
|
|
|
82
86
|
Read `references/versions.md` in `cratis-screenplay-toolchain` when selecting a tool or checking the full version and capability pins. Reverify before claiming
|
|
83
87
|
another version behaves the same.
|
|
@@ -164,8 +168,9 @@ or actor that nobody confirmed. Read `references/worked-integration.md` when you
|
|
|
164
168
|
separate binder check.
|
|
165
169
|
- A trigger with `reads` that `produces` directly fails binding: decide in a command. `reads` never protects.
|
|
166
170
|
- An authorized command exercised in a spec without `given caller` is PLAY0389 at binding.
|
|
167
|
-
- A list query (`=> Item[]`)
|
|
168
|
-
|
|
171
|
+
- A list query (`=> Item[]`) binds (Screenplay 4.105.0+; a snapshot list is not rendered, `STAGE-ESM-010`);
|
|
172
|
+
a clock sweep that iterates items needs a code body the reference does not run
|
|
173
|
+
(`references/todo-list-example.md`).
|
|
169
174
|
|
|
170
175
|
**Modeling defaults** (deviate with a recorded reason)
|
|
171
176
|
- A `produces` without `for` lands on the triggering fact's source; clock and trigger occurrences have
|
|
@@ -12,7 +12,7 @@ technique: partial work stays visible and nothing is skipped because it looked r
|
|
|
12
12
|
Result is `complete` only when every column is filled or says why it does not apply (for example
|
|
13
13
|
"direct effect: immediate, internal, cannot fail"). `open` names the unresolved decision and who
|
|
14
14
|
answers. `blocked` names the actual capability gap with intended behavior. For example,
|
|
15
|
-
CLI
|
|
15
|
+
the pinned CLI/Stage pair (toolchain `references/versions.md`) admits ESM v10 to construct checks, where reaction identity
|
|
16
16
|
is refused with STAGE-ESM-034. Previous CLI 3.46.1 refused v10 at the version gate
|
|
17
17
|
with CLI-RENDER-004; do not report that historical refusal as the current gap.
|
|
18
18
|
|