@cratis/pi 7.32.0 → 7.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/corpus/agents/screenplay-modeler.md +1 -1
- package/package/corpus/agents/screenplay-renderer.md +1 -1
- package/package/corpus/agents/screenplay-reviewer.md +1 -1
- package/package/corpus/agents/slice-implementer.md +1 -1
- package/package/corpus/rules/profiles.md +1 -0
- package/package/corpus/skills/cratis-application-slice-conformance/LICENSE +2 -2
- package/package/corpus/skills/cratis-application-slice-conformance/SKILL.md +5 -0
- package/package/corpus/skills/cratis-application-slice-conformance/references/checklists.md +12 -0
- package/package/corpus/skills/cratis-application-slice-conformance/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-application-slice-specifications/LICENSE +2 -2
- package/package/corpus/skills/cratis-application-slice-specifications/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-arc-react-page/LICENSE +2 -2
- package/package/corpus/skills/cratis-arc-react-page/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-chronicle-event-modeling/SKILL.md +12 -6
- package/package/corpus/skills/cratis-chronicle-reactor/LICENSE +2 -2
- package/package/corpus/skills/cratis-chronicle-reactor/SKILL.md +5 -2
- package/package/corpus/skills/cratis-chronicle-reactor/references/provenance.md +3 -3
- package/package/corpus/skills/cratis-chronicle-reactor/references/slice-delivery-checklist.md +93 -0
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/LICENSE +2 -2
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/SKILL.md +1 -1
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/provenance.md +3 -3
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/view-lifecycle-checks.md +79 -0
- package/package/corpus/skills/cratis-event-model-diagram/LICENSE +7 -0
- package/package/corpus/skills/cratis-event-model-diagram/SKILL.md +26 -2
- package/package/corpus/skills/cratis-event-model-diagram/references/provenance.md +19 -0
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +16 -11
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +7 -7
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/provenance.md +5 -6
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/public-events-and-direction.md +2 -3
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +9 -5
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +6 -6
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translate-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +16 -15
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/invocation-identity.md +2 -2
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +20 -19
- package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +3 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +1 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/references/enum-numbers.md +93 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +5 -6
- package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +4 -2
- package/package/corpus/skills/cratis-screenplay-delivery-planning/LICENSE +9 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/SKILL.md +118 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/parallel-delivery.md +45 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/provenance.md +29 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/slice-counting.md +43 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/velocity-and-capacity.md +48 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/verification.json +16 -0
- package/package/corpus/skills/cratis-screenplay-discovery/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +6 -5
- package/package/corpus/skills/cratis-screenplay-discovery/references/divergent-sweep.md +1 -0
- package/package/corpus/skills/cratis-screenplay-discovery/references/domain-analysis-template.md +92 -0
- package/package/corpus/skills/cratis-screenplay-discovery/references/personas-and-causes.md +2 -2
- package/package/corpus/skills/cratis-screenplay-discovery/references/provenance.md +4 -3
- package/package/corpus/skills/cratis-screenplay-discovery/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-event-modeling/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +30 -29
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +7 -5
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +13 -10
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +26 -13
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/candidate-inventory.md +6 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +7 -0
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/prologue-safety.md +22 -17
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md +2 -2
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/side-car-migration.md +1 -0
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +25 -25
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +8 -2
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +8 -3
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +38 -8
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/property-links.md +126 -0
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/screen-authoring-workflow.md +3 -4
- package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-model-review/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +8 -8
- package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +2 -2
- package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +4 -4
- package/package/corpus/skills/cratis-screenplay-model-review/references/model-inventory-report.md +75 -0
- package/package/corpus/skills/cratis-screenplay-model-review/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-screenplay-model-review/references/public-keys-and-routes.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-review/references/worked-example.md +4 -3
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +7 -5
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/core-rules-digest.md +131 -0
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/phases.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/provenance.md +25 -4
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/reasoning-notes.md +2 -2
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/verdicts-and-modes.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +5 -4
- package/package/corpus/skills/cratis-screenplay-projections/SKILL.md +9 -5
- package/package/corpus/skills/cratis-screenplay-projections/references/pdl-grammar.md +4 -2
- package/package/corpus/skills/cratis-screenplay-read-surface/LICENSE +7 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +16 -8
- package/package/corpus/skills/cratis-screenplay-read-surface/references/provenance.md +21 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/references/screen-patterns.md +130 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +60 -47
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/delivery-protocol.md +17 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/drift-and-ledger.md +19 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +24 -6
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +21 -16
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/worked-example.md +34 -29
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +5 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +1 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +5 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-example.md +32 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-catalogue.md +7 -6
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md +3 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-workshop.md +15 -7
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +11 -10
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/view-and-story-specs.md +6 -4
- package/package/corpus/skills/cratis-screenplay-slice-design/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +4 -3
- package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +2 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/references/derived-condition-events.md +68 -0
- package/package/corpus/skills/cratis-screenplay-slice-design/references/field-lineage.md +1 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/provenance.md +5 -5
- package/package/corpus/skills/cratis-screenplay-slice-design/references/read-model-design.md +17 -0
- package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +6 -6
- package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +3 -3
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +7 -5
- package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +4 -3
- package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md +3 -2
- package/package/corpus/skills/cratis-screenplay-specifications/references/persona-callers-and-cases.md +3 -0
- package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +3 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +14 -11
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +31 -3
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/chronicle-boundaries.md +6 -6
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +12 -11
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/evolution.md +18 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/provenance.md +4 -4
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +1 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +29 -18
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +3 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +7 -4
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +21 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +5 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +32 -18
- package/package/corpus/skills/cratis-screenplay-toolchain/references/production-routes-and-filters.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +46 -16
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract-exceptions.json +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +1092 -17
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +8 -8
- package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +18 -13
- package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +41 -20
- package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +7 -2
- package/package/corpus/skills/cratis-screenplay-ui-composition/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +10 -10
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/flow-review.md +1 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +41 -16
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/worked-flow.md +17 -9
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +85 -77
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +65 -16
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/case-tables-and-whole-numbers.md +2 -2
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/render-example.md +3 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +30 -15
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +21 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +9 -4
- package/package/profile-catalog.json +1 -0
- package/package.json +1 -1
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/delivery-protocol.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Delivery protocol
|
|
2
2
|
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- 1. Inputs to collect before the first command
|
|
6
|
+
- 2. Commands
|
|
7
|
+
- 3. Reading results
|
|
8
|
+
- 4. Customizations (bounded)
|
|
9
|
+
- 5. Done check (before reporting)
|
|
10
|
+
- 6. Stop and ask
|
|
11
|
+
|
|
3
12
|
The render phase proves and publishes; it does not write business behaviour. Run one phase
|
|
4
13
|
per tool call and read each result from its exit status, never from a grep of the log.
|
|
5
14
|
|
|
@@ -9,7 +18,8 @@ per tool call and read each result from its exit status, never from a grep of th
|
|
|
9
18
|
identity"). A dirty flag is never a revision. Bind the whole run to it; if it changes, start over.
|
|
10
19
|
- The **model root**. Use a dedicated folder: implementation attachments are read from it.
|
|
11
20
|
- **Render inputs:** `--name` (application identity, required for plain source, a C# identifier),
|
|
12
|
-
`--project-name`, `--root-namespace`, `--target cratis
|
|
21
|
+
`--project-name`, `--root-namespace`, `--target cratis`, and `--scope <Module[.Feature][.Slice]>` (repeatable) when
|
|
22
|
+
only an admitted part is delivered; record the scope list with the source identity. Keep them identical across
|
|
13
23
|
re-renders; changing the name or target makes publication refuse as an identity change.
|
|
14
24
|
- **Destination:** `.ai-work/screenplay/<model-slug>/render-probe/<App>` unless the user named another.
|
|
15
25
|
- Which modeled screens, personas and seams exist (UI omission list, section 4).
|
|
@@ -19,6 +29,8 @@ per tool call and read each result from its exit status, never from a grep of th
|
|
|
19
29
|
| Phase | Command | Result is |
|
|
20
30
|
| --- | --- | --- |
|
|
21
31
|
| Admission and publication | `cratis render <root> --name <App> --destination <dir> [--project-name <P>] [--root-namespace <N>] -o json` (forward every option recorded in section 1) | exit 0 published (receipt on stdout), 5 refused (diagnostics, nothing published), 1 missing input |
|
|
32
|
+
| Drift or pending-change check | the same command plus `--check` (and `--scope`, `--force` as used) | no write, no recovery: exit 0 current, 6 `changes_pending`, 5 planning failure, refusal or pending recovery |
|
|
33
|
+
| Bundled-binder check | `cratis screenplay validate --executable <root>` | exit 5 with "does not bind into an executable semantic model" when it does not; never renders or writes. Uses the bundled compiler (CLI 3.53.1 = Screenplay 4.137.0), not standalone 4.139.0 |
|
|
22
34
|
| Debug build | `dotnet build <dir>/<Project>.csproj -c Debug` | the build's exit status |
|
|
23
35
|
| Debug tests | `dotnet test <dir>/<Project>.csproj -c Debug --no-build` | the test runner's exit status plus per-test results |
|
|
24
36
|
| List the generated classes | `dotnet test <dir>/<Project>.csproj -c Debug --no-build --list-tests` | the names to map to specifications |
|
|
@@ -38,7 +50,10 @@ file (for example `--logger "trx"` with a results directory under the probe fold
|
|
|
38
50
|
- **Publication:** written, unchanged and removed counts, plus `recovered`. `refused` when a managed file
|
|
39
51
|
was modified, an unmanaged file sits on a planned path, a modified stale file would be removed,
|
|
40
52
|
or the manifest identity changed (`drift-and-ledger.md`). Ok means `recovered: false` and
|
|
41
|
-
`written + unchanged` equal to the artifact count
|
|
53
|
+
`written + unchanged` equal to the artifact count (for a `--scope` render, the scope's artifacts: other
|
|
54
|
+
scopes' files are preserved and never counted; compare against the receipt's `owners`/`sources` for the
|
|
55
|
+
selected slices and the `orphaned` list). The receipt's `sources` (CLI 3.45.0 or later) map generated files back to
|
|
56
|
+
specifications and slices.
|
|
42
57
|
- **Build:** Debug exit status. Classify each error location as `Customizations/`, managed or outside.
|
|
43
58
|
An error in a managed file after a clean render is a renderer defect or an environment problem:
|
|
44
59
|
report it, never patch the file.
|
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/drift-and-ledger.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
The ownership manifest `.cratis-render.json` at the destination records `semanticRevision`
|
|
5
5
|
(`rev1:<sha256>`), the target, the renderer, the application name and a hash per managed file.
|
|
6
6
|
|
|
7
|
-
Facts verified with `cratis render` 3.28.2 on one model: the same files rendered under the names
|
|
7
|
+
Facts verified with `cratis render` 3.28.2 on one model (historical probe; still how identity works): the same files rendered under the names
|
|
8
8
|
`Marina` and `Harbour` gave different `semanticRevision` values, so **the application name is part
|
|
9
9
|
of the revision**. The MCP workspace names the application after the model root folder (without
|
|
10
10
|
`.screenplay/identities.json`), so its `modelRevision` is not comparable with a render's manifest
|
|
@@ -12,14 +12,31 @@ revision by assumption. Without `.screenplay/identities.json` it changes when th
|
|
|
12
12
|
renamed (relocating the root while keeping its name does not); source positions and descriptions do
|
|
13
13
|
not change it, and a file move changes it only if it changes logical placement or application identity.
|
|
14
14
|
|
|
15
|
+
**First probe: `cratis render <root> --name <App> --destination <dir> --check`** (CLI 3.44.0 or later; add
|
|
16
|
+
the `--scope` list used for delivery). It plans against the real destination, writes nothing and runs
|
|
17
|
+
no recovery: exit 0 current, 6 changes pending, 5 planning failure, refusal or pending recovery.
|
|
18
|
+
Documentation edits also change managed-file hashes, so they show as pending changes. `--check`
|
|
19
|
+
replaces the throwaway `-drift` render below; the manifest comparison stays as a cross-check.
|
|
20
|
+
|
|
15
21
|
Compare in this order:
|
|
16
22
|
1. **Source identity** (`cratis-screenplay-modeling-lifecycle` `references/verdicts-and-modes.md`):
|
|
17
23
|
compute it for the current model and compare it with the identity recorded when the output was
|
|
18
24
|
rendered. Equal: the same model bytes, whatever git says. Different: the output is behind the model.
|
|
19
|
-
2. **Manifest revision
|
|
25
|
+
2. **Manifest revision** (when `--check` is not available): render the current model with the **same** `--name` and inputs into a
|
|
20
26
|
fresh probe folder (`.../render-probe/<App>-drift`) and compare its manifest `semanticRevision`
|
|
21
27
|
with the published one. Equal: no semantic change since publication. Different: re-render and review the receipt.
|
|
22
28
|
3. Equal revisions prove neither customization conformance nor faithful UI.
|
|
29
|
+
4. **Hand-written scope against the accepted model:** `cratis screenplay conform <model-root> --project <path>`
|
|
30
|
+
(CLI 3.42.0 or later; Arc, Marten and Critter Stack code) compares the declarations recovered from
|
|
31
|
+
code with the model by exact structural address. Exit 0 no blocking findings, 1 defects (code-only
|
|
32
|
+
declarations, shape mismatches), 2 could not run or incomplete coverage; model-only members are
|
|
33
|
+
informational. It is **structural drift evidence only**, never a behavioral equivalence verdict and
|
|
34
|
+
never V4 or V5; it needs the same generation options (`--domain`, `--feature-root`, `--module`,
|
|
35
|
+
`--skip-segments`, `--modules-from-namespace-roots`) that reproduce the authored placement, or
|
|
36
|
+
everything looks missing. MSBuild evaluates the project (use a trusted clone) and the bundle's
|
|
37
|
+
`Cratis.Arc.Screenplay` is 22.54.0, so recovery behaves like that adapter. It does not replace
|
|
38
|
+
`cratis-application-slice-conformance`, which reconciles specifications, rules and behavior.
|
|
39
|
+
Whether it is meaningful on a Stage-rendered application is unverified.
|
|
23
40
|
|
|
24
41
|
Use the same toolchain as the render; revisions from another Screenplay version are not
|
|
25
42
|
comparable by assumption. A dirty git flag or commit is context, never a revision.
|
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Gap-fill hand-off to `slice-implementer`
|
|
2
2
|
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- One scope per brief
|
|
6
|
+
- What comes back
|
|
7
|
+
- Rules the model states only in prose
|
|
8
|
+
- Automation and Translate scope
|
|
9
|
+
- Re-delivery
|
|
10
|
+
|
|
3
11
|
For scope the renderer rejects (case C in `SKILL.md`) and for hand-written scope next to a
|
|
4
12
|
generated base (case B). The render phase reports the capability boundary; the implementer
|
|
5
13
|
authors the code with the `.play` slice and its specifications as the contract. Contract
|
|
@@ -61,13 +69,13 @@ ambiguous addresses; contracts are never inferred from names.
|
|
|
61
69
|
A rule that exists only in a description, or a state-dependent rule the model marks as not
|
|
62
70
|
enforced, is unenforced in generated scope. List it in the ledger as a target requirement. In
|
|
63
71
|
hand-written code it needs an atomic enforcement point: a protected read or a concurrency scope
|
|
64
|
-
(Stage 4.
|
|
72
|
+
(Stage 4.73.1 rendered apps scaffold Arc 22.68.0/Chronicle 19.45.0: protected-read APIs
|
|
65
73
|
are available to gap-fill, with projection/key admission and active enrollment), or a Chronicle constraint. A stale view or
|
|
66
74
|
a caller-supplied status is not enforcement.
|
|
67
75
|
|
|
68
76
|
## Automation and Translate scope
|
|
69
|
-
Stage 4.
|
|
70
|
-
against the slice and its specifications. The realization follows the actual construct and
|
|
77
|
+
Stage (4.73.1) renders no Automation or Translate slice and no reaction or capture, so the whole
|
|
78
|
+
automation is gap-fill, written against the slice and its specifications. The realization follows the actual construct and
|
|
71
79
|
trigger, not the slice label: a capture is an ingestion adapter, an event reaction (including a
|
|
72
80
|
translator reaction) is a reactor, a clock or application trigger is a scheduler or host signal. Where they are
|
|
73
81
|
registered depends on the case. Case B (a generated base exists, and the user authorized the
|
|
@@ -77,12 +85,22 @@ not bind a modeled reaction or capture. Case C (no generated application): there
|
|
|
77
85
|
composition conventions (`rules/vertical-slices.md`, `cratis-chronicle-reactor`).
|
|
78
86
|
Declare the trusted actor with reaction `runs as system role "<Role>"`
|
|
79
87
|
(standalone 4.125.0, ESM v10); `given caller` is not an invocation actor.
|
|
80
|
-
Historical CLI 3.41.0's older compiler rejected the syntax. CLI
|
|
81
|
-
reaches v10 construct admission but still refuses reaction identity
|
|
82
|
-
(STAGE-ESM-034)
|
|
88
|
+
Historical CLI 3.41.0's older compiler rejected the syntax. The pinned CLI/Stage pair
|
|
89
|
+
(`cratis-screenplay-toolchain/references/versions.md`) reaches v10 construct admission but still refuses reaction identity
|
|
90
|
+
(STAGE-ESM-034). Gap-fill retains the declared role and uses Arc
|
|
83
91
|
`[ExecuteCommandsAsSystem]` for returned commands. Checked model and diagnostics:
|
|
84
92
|
captures-and-reactions `references/invocation-identity.md`.
|
|
85
93
|
|
|
94
|
+
A reaction that both produces events and invokes commands keeps its single modeled form
|
|
95
|
+
(`STAGE-ESM-037` is Stage's refusal, not a model defect). Hand-write one reactor returning the events
|
|
96
|
+
and the commands: on Arc 22.72.0 or later (the Stage 4.73.1 scaffold pins Arc 22.68.0, whose command handler accepts a collection only when every element is a command, so a rendered app needs a proven dependency override) the runtime appends the events first as one batch, then
|
|
97
|
+
runs the commands in order, with no transaction across the two effects; a failing command stops the
|
|
98
|
+
later ones but keeps the committed events, and a retry can append the events again, so make the
|
|
99
|
+
handler idempotent (`[OnceOnly]` and the failure behavior in `cratis-chronicle-reactor`). Return a
|
|
100
|
+
stable array or list. The Stage scaffold pins Arc 22.68.0, so raise the version through
|
|
101
|
+
`Customizations/Dependencies.props` only after a restore and build proves it. Never split the
|
|
102
|
+
reaction or drop an effect to dodge rendering.
|
|
103
|
+
|
|
86
104
|
## Re-delivery
|
|
87
105
|
The work list is the full in-scope contract delta since the ledger's last verified source
|
|
88
106
|
identity (specifications, rules, mappings, realization notes), then the whole contract is
|
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/provenance.md
CHANGED
|
@@ -10,11 +10,10 @@
|
|
|
10
10
|
- Three delivery cases (admission failure, generated base plus authorized gap-fill, fully
|
|
11
11
|
hand-written delivery) and the whole-model rule: from the #493 plan review of render versus gap-fill.
|
|
12
12
|
|
|
13
|
-
## Adapted closely (Martin Dilger and Nebulit GmbH
|
|
13
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
14
14
|
|
|
15
15
|
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
16
|
-
by Martin Dilger and Nebulit GmbH (https://nebulit.de)
|
|
17
|
-
is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
16
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
|
|
18
17
|
|
|
19
18
|
| Source file | Used in | How |
|
|
20
19
|
|---|---|---|
|
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md
CHANGED
|
@@ -7,17 +7,20 @@ The admitted subset itself (what Stage renders, member by member) is owned by
|
|
|
7
7
|
probe reports and choosing what to do. Do not copy the code table here.
|
|
8
8
|
|
|
9
9
|
## Pipeline that produces the codes
|
|
10
|
-
1. The CLI compiles and binds the model with its **bundled** Screenplay (4.
|
|
11
|
-
|
|
10
|
+
1. The CLI compiles and binds the **whole** model with its **bundled** Screenplay (4.137.0 in
|
|
11
|
+
cratis 3.53.1, ESM up to v10 for rendering; older bundles bound less). Binding is never scoped:
|
|
12
|
+
any binding error blocks even a `--scope` render. Binding errors are `PLAY0268` (outside the admitted vertical), `PLAY0269`
|
|
12
13
|
(deferred), `PLAY0270` (report-only information), `PLAY0271` (legacy semantics) and `PLAY0273`
|
|
13
14
|
(a specification shape).
|
|
14
15
|
2. Execution planning builds the plan and can emit `PLAN-*` diagnostics before Stage runs.
|
|
15
16
|
3. Stage plans the target and admits or rejects each member: `STAGE-ESM-0xx`; profile and path
|
|
16
|
-
problems `STAGE-CRATIS-0xx`. An
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
problems `STAGE-CRATIS-0xx`. An evolved event is reported with Stage's own `STAGE-ESM-026`
|
|
18
|
+
(still refused at Stage 4.73.1); the CLI adds nothing. Stage admits ESM v1 to v10 by version and
|
|
19
|
+
refuses each construct it does not render with its own code (`-024`, `-027` to `-037`).
|
|
20
|
+
4. Any error in the selected scope publishes nothing: the run ends with exit 5 and the diagnostics.
|
|
21
|
+
Without `--scope` the scope is the whole application. With `--scope`, `PLAN-*` problems in
|
|
22
|
+
unselected slices are warnings and `STAGE-ESM-*` refusals in unselected slices do not block;
|
|
23
|
+
binding problems and application-level declarations still do.
|
|
21
24
|
|
|
22
25
|
The standalone `screenplay` tool can report V3 ready where the bundled binder refuses (newer
|
|
23
26
|
ESM). Only the probe answers renderability. `PLAY0270` entries are information, not blockers.
|
|
@@ -26,8 +29,8 @@ ESM). Only the probe answers renderability. `PLAY0270` entries are information,
|
|
|
26
29
|
|
|
27
30
|
| Class | Meaning | Typical examples (each verified in `admission.md`) | Action |
|
|
28
31
|
| --- | --- | --- | --- |
|
|
29
|
-
| **Model fix (in mode)** | the model is in, or the user chose, renderable mode and breaks its own subset in a way that has a renderable equivalent with the same meaning | a `produces` whose `for` is not the command identifier; one `StateChange` slice with two commands (`STAGE-ESM-004`); two projections for one read model (`-007`); a policy
|
|
30
|
-
| **Capability gap** | the intended meaning needs a construct Stage does not render yet | list
|
|
32
|
+
| **Model fix (in mode)** | the model is in, or the user chose, renderable mode and breaks its own subset in a way that has a renderable equivalent with the same meaning | a `produces` whose `for` is not the command identifier; one `StateChange` slice with two commands (`STAGE-ESM-004`); two projections for one read model (`-007`); a policy Stage cannot express portably (`-015`; role-only and opaque pure policies render at 4.73.1) | edit request to the modeler session with address, change and rationale |
|
|
33
|
+
| **Capability gap** | the intended meaning needs a construct Stage does not render yet | a snapshot list query (`-010`; observable lists and keyed or unkeyed lists bind and observable lists render), and `filter`, `scoped to`, `performer` queries (`PLAY0268`); Automation and Translate slices (`-001`/`-024`, Stage#79); reactions, clocks, captures and triggers (`-024`); a reaction that both produces and invokes (`-037`: keep it whole and hand-write one reactor on Arc 22.72.0 or later (the scaffold pins 22.68.0: a proven override), never split it; Stage#207); generated values and responses (`-028`/`-029`, Stage#175); `then no readmodel` (`-027`); evolved events (`STAGE-ESM-026`); conditional `produces when` (`-006`); `reads` (`PLAY0271`); code validation (`-005`); compliance attributes (`PLAY0268` "require portable data-subject semantics"); a command `handler` (`PLAY0268`) | keep the model; ledger entry; options a to c in `SKILL.md`; link the Stage issue |
|
|
31
34
|
| **Tool skew** | the bundled compiler disagrees with documented semantics | the false `PLAY0285` on reaction cascades from a cratis before 3.28.2 bundle (cli#242); codes the standalone compiler does not raise | record in the session state and the ledger; never "fix" a correct model |
|
|
32
35
|
| **Environment** | not the model | restore failures, missing SDK, a destination that is not writable | fix the environment or report blocked |
|
|
33
36
|
|
|
@@ -39,19 +42,21 @@ ESM). Only the probe answers renderability. `PLAY0270` entries are information,
|
|
|
39
42
|
- A refusal never licenses dropping a specification, an event generation or a protection.
|
|
40
43
|
- Group codes by construct and count, report the first few with their `file(line,col)` location,
|
|
41
44
|
and keep the full JSON in the probe folder. Do not paste the list.
|
|
42
|
-
- One error blocks the
|
|
43
|
-
would render if the blockers were removed (from the locations), marked as an estimate
|
|
45
|
+
- One error blocks the selected scope. Say how many slices are affected, and which slices
|
|
46
|
+
would render if the blockers were removed (from the locations), marked as an estimate; offer a
|
|
47
|
+
`--scope` render of the admitted slices as an option, never a silently thinner render.
|
|
44
48
|
- Admission can pass and a Debug test still fail. Admission is never a passing test; see
|
|
45
49
|
`cratis-stage-rendering-and-sandbox` `references/render-example.md`.
|
|
46
50
|
|
|
47
51
|
## Stage issues to cite in ledger entries
|
|
48
|
-
Read
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
Read as open against Stage 4.73.1: portable query semantics Stage#58; Automation and Translate
|
|
53
|
+
slices Stage#79; mapping expressions and projection blocks Stage#117; modeled authentication
|
|
54
|
+
Stage#120; per-persona screens Stage#194; evolved events Stage#204; mixed reaction effects Stage#207;
|
|
55
|
+
generated values and responses Stage#175. Closed: event generation Stage#165, descriptions as code docs
|
|
56
|
+
Stage#178, ESM v7 Stage#201. Check that an issue is still open before citing
|
|
52
57
|
it, and cite only numbers you have just read. A closed issue is a trigger to probe again.
|
|
53
58
|
|
|
54
59
|
## Reference outcomes
|
|
55
60
|
- The complete marina model of `cratis-stage-rendering-and-sandbox` `references/render-example.md`:
|
|
56
|
-
admission ok, 30 artifacts, Debug build ok, 7 tests passed (cratis 3.28.2).
|
|
61
|
+
admission ok, 30 artifacts, Debug build ok, 7 tests passed (cratis 3.28.2; on 3.53.1 admission and publication gave 56 artifacts, build and tests not re-run).
|
|
57
62
|
- The model in `worked-example.md`: admission refused with 2 blocking `PLAY0268` diagnostics, nothing published.
|
package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/worked-example.md
CHANGED
|
@@ -8,14 +8,16 @@
|
|
|
8
8
|
- Decision and ledger entry
|
|
9
9
|
- The report
|
|
10
10
|
|
|
11
|
-
A marina model with one renderable command and one list view. The model compiles
|
|
12
|
-
refuses it, so nothing is published. The example shows how to classify, decide and
|
|
11
|
+
A marina model with one renderable command and one snapshot list view. The model compiles and binds;
|
|
12
|
+
`cratis render` refuses it, so nothing is published. The example shows how to classify, decide and
|
|
13
|
+
report. Probed with the standalone compiler 4.139.0 and cratis 3.53.1 (scratch model, observed); the
|
|
14
|
+
earlier 3.28.2 outcome (two `PLAY0268` binding errors) is history.
|
|
13
15
|
|
|
14
16
|
## The model
|
|
15
17
|
|
|
16
18
|
```screenplay
|
|
17
19
|
// cratis-screenplay-render-and-gap-fill: complete model for the refused-render example.
|
|
18
|
-
// Compiles with warnings as errors; `cratis render` 3.
|
|
20
|
+
// Compiles with warnings as errors; `cratis render` 3.53.1 refuses the snapshot list query (STAGE-ESM-010).
|
|
19
21
|
domain Harbour.Marina
|
|
20
22
|
|
|
21
23
|
concept BerthId : Uuid
|
|
@@ -65,42 +67,44 @@ module Berths
|
|
|
65
67
|
|
|
66
68
|
## The probe
|
|
67
69
|
|
|
68
|
-
Source identity recorded first (`<commit>+<digest>`), tools named: `screenplay 4.
|
|
69
|
-
V1 passed
|
|
70
|
+
Source identity recorded first (`<commit>+<digest>`), tools named: `screenplay 4.139.0`, `cratis 3.53.1`.
|
|
71
|
+
V1 passed; the specification passes in `screenplay test`. Then:
|
|
70
72
|
|
|
71
73
|
```text
|
|
72
74
|
$ cratis render <model-root> --name Marina --destination .ai-work/screenplay/marina/render-probe/Marina -o json
|
|
73
|
-
exit 5, nothing published
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
PLAY0268 hire.play(41,7) Query 'AllBerths' must declare one caller-supplied 'by' argument in the
|
|
77
|
-
first ESM v1 vertical.
|
|
75
|
+
exit 5, nothing published ("planning reported 1 error(s)")
|
|
76
|
+
STAGE-ESM-010 Query 'AllBerths' is neither an optional snapshot lookup by identifier nor an
|
|
77
|
+
observable collection query the renderer can preserve.
|
|
78
78
|
(+ four PLAY0270 information entries: authoring metadata, not blockers)
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
+
The list query binds (a list narrowed by nothing, or by one `by` key, is admitted by the binder);
|
|
82
|
+
Stage refuses it because it is a snapshot, not an observable collection.
|
|
83
|
+
|
|
81
84
|
## Classification
|
|
82
85
|
|
|
83
86
|
| Diagnostic | Class | Why |
|
|
84
87
|
| --- | --- | --- |
|
|
85
|
-
| `
|
|
86
|
-
| `PLAY0268` `BerthEntry` keyed query | capability gap (same cause) | it follows from the missing keyed query |
|
|
88
|
+
| `STAGE-ESM-010` `AllBerths` | capability gap | the business question is "show all berths" as a snapshot list; Stage renders a keyed optional snapshot lookup or an **observable** collection (Stage#58 tracks portable query semantics) |
|
|
87
89
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
The blocker sits in one slice, `Berths/Reservations/BerthRegister`; `ReserveBerth` renders on its
|
|
91
|
+
own: `cratis render ... --scope Berths.Reservations.ReserveBerth` published 46 artifacts to a scratch
|
|
92
|
+
destination (observed; the whole model still compiled and bound, and the plain scaffold was added
|
|
93
|
+
because the destination had no manifest). Two tempting "model fixes" exist: a keyed `BerthById`
|
|
94
|
+
lookup, or marking the list `observable`. The first changes what the harbour master can see; the
|
|
95
|
+
second changes delivery from a snapshot to a live subscription. Both are **modeling decisions for
|
|
96
|
+
the user**, never renderer workarounds. Here the user keeps the snapshot list.
|
|
93
97
|
|
|
94
98
|
## Decision and ledger entry
|
|
95
99
|
|
|
96
|
-
Case A, then case
|
|
97
|
-
delivered by hand, and the model stays the contract.
|
|
100
|
+
Case A, then case B for `ReserveBerth` (rendered with `--scope`) and case C for the list: the user keeps
|
|
101
|
+
the full model, the view is delivered by hand, and the model stays the contract.
|
|
98
102
|
|
|
99
103
|
```text
|
|
100
|
-
F1 scope: Berths/Reservations/BerthRegister (spec: none yet)
|
|
101
|
-
blocking codes:
|
|
104
|
+
F1 scope: Berths/Reservations/BerthRegister (spec: none yet)
|
|
105
|
+
blocking codes: STAGE-ESM-010 x1 (snapshot list query)
|
|
102
106
|
class: capability gap decision: implementer (user, <date>)
|
|
103
|
-
fallback location: src/Marina.Application/Berths/ spec mapping:
|
|
107
|
+
fallback location: src/Marina.Application/Berths/ spec mapping: none yet (BerthRegister has no specification)
|
|
104
108
|
revisit trigger: Stage#58 (portable query semantics) last verified: <source identity>
|
|
105
109
|
```
|
|
106
110
|
|
|
@@ -112,12 +116,12 @@ what the reference execution route supports).
|
|
|
112
116
|
## The report
|
|
113
117
|
|
|
114
118
|
```text
|
|
115
|
-
Mode: renderable (user chose) Source: <commit>+<digest> tools: screenplay 4.
|
|
116
|
-
V1 authorable: pass (1 file, screenplay 4.
|
|
117
|
-
V2 diagnostics: not run: no MCP in this session
|
|
118
|
-
V3 binding:
|
|
119
|
-
V4 specs:
|
|
120
|
-
V5 admission: refused,
|
|
119
|
+
Mode: renderable (user chose) Source: <commit>+<digest> tools: screenplay 4.139.0, cratis 3.53.1
|
|
120
|
+
V1 authorable: pass (1 file, screenplay 4.139.0)
|
|
121
|
+
V2 diagnostics: not run: no MCP in this session
|
|
122
|
+
V3 binding: pass (cratis validate --executable, bundled 4.137.0)
|
|
123
|
+
V4 specs: pass (screenplay test 4.139.0: 1 executed, 1 passed)
|
|
124
|
+
V5 admission: refused, 1 blocking diagnostic (STAGE-ESM-010), nothing published; scoped to Berths.Reservations.ReserveBerth: not part of this report
|
|
121
125
|
V5 publication: not run: admission refused
|
|
122
126
|
V5 build: not run: nothing published
|
|
123
127
|
V5 tests: not run: nothing published
|
|
@@ -125,8 +129,9 @@ UI omissions: not applicable (no render)
|
|
|
125
129
|
Hand-off: F1 to slice-implementer (brief: paths and addresses; contract: the .play slice and its
|
|
126
130
|
specifications; conformance: cratis-application-slice-conformance)
|
|
127
131
|
Edit request: BerthRegister needs a specification for the list (address, expected rows)
|
|
132
|
+
Note: a --scope render of ReserveBerth is a separate V5 result with its own scope line
|
|
128
133
|
```
|
|
129
134
|
|
|
130
|
-
When the list query later renders, probe again with the same inputs. If it does, plan the
|
|
135
|
+
When the list query later renders (for example after Stage ships snapshot lists), probe again with the same inputs. If it does, plan the
|
|
131
136
|
migration from hand-written files to managed output with the user before re-rendering; a hand
|
|
132
137
|
file on a planned path makes publication refuse.
|
|
@@ -32,5 +32,5 @@ SOFTWARE.
|
|
|
32
32
|
|
|
33
33
|
This skill also adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
|
|
34
34
|
(https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
|
|
35
|
-
https://nebulit.de), used with the
|
|
36
|
-
|
|
35
|
+
https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
|
|
36
|
+
material remains credited to Martin Dilger and Nebulit GmbH.
|
|
@@ -24,9 +24,9 @@ language cannot express today are recorded, not faked. Grammar and outcome compa
|
|
|
24
24
|
`cratis-specification-by-example`); a full audit (`cratis-screenplay-model-review`).
|
|
25
25
|
|
|
26
26
|
## Verified product sources
|
|
27
|
-
Screenplay v4.66.0 (`c89198b`) and v4.68.0 (`79801bf`, ESM v7 fixtures and `then returns`)
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
Screenplay v4.66.0 (`c89198b`) and v4.68.0 (`79801bf`, ESM v7 fixtures and `then returns`) were the
|
|
28
|
+
original sources; released behavior was re-read at v4.139.0 (`Documentation/screenplay/specifications.md`,
|
|
29
|
+
`queries.md`, the standalone compiler). Current pins, the bundle and the probes are in
|
|
30
30
|
`cratis-screenplay-toolchain` `references/versions.md`. At Screenplay v4.127.0,
|
|
31
31
|
MCP `find-specification-obligations` derives SPEC001–SPEC008 from declarations;
|
|
32
32
|
met means matching authored presence, not full coverage or passing execution.
|
|
@@ -84,7 +84,7 @@ question is not four approvals.
|
|
|
84
84
|
row), absence, ordering. Mark lifecycle branches as branches.
|
|
85
85
|
9. **State-dependent rules**: `reads <View>` + `require <expr> message "..."` as stated intent,
|
|
86
86
|
marked **NOT enforced in the model today** in the slice `description` (binding reports
|
|
87
|
-
PLAY0268/0271: expected in design mode; Screenplay#129
|
|
87
|
+
PLAY0268/0271: expected in design mode; Screenplay#129), target named (Arc
|
|
88
88
|
`[ProtectedDecision]` + `DecisionRead<T>`, Chronicle DCB, or a constraint). Forbidden:
|
|
89
89
|
caller-supplied copies of state in `require`, boolean attestation inputs (`confirmsX ==
|
|
90
90
|
true`) and rules hidden in `handler`/hint prose. Never drop an unresolved given or assertion
|
|
@@ -187,6 +187,7 @@ production route failure, matching/wrong source/stream and unrouted facts;
|
|
|
187
187
|
see toolchain `references/production-routes-and-filters.md`.
|
|
188
188
|
|
|
189
189
|
## Version skew: reaction cascades and false PLAY0285
|
|
190
|
+
(History: the 3.53.1 bundle carries Screenplay 4.137.0, so this skew no longer applies to it.)
|
|
190
191
|
Under ESM v6 a command spec's `then` lists the events reactions cascade from it. The compiler
|
|
191
192
|
bundled in `cratis` before 3.28.2 (Screenplay 4.60.1) reported a **false PLAY0285** for such
|
|
192
193
|
a spec (cli#242); the standalone `screenplay` 4.66.0 and `cratis` 3.28.2 accept it (probed).
|
package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md
CHANGED
|
@@ -10,7 +10,7 @@ Complete, compiled design-mode model (marina guest berths) showing a coverage ma
|
|
|
10
10
|
// Screens and personas are out of scope here (cratis-screenplay-slice-design). This is the canonical design-mode
|
|
11
11
|
// example: stored-state rules (the reservation must be live) are stated as `reads BerthBooking`
|
|
12
12
|
// + `require ... message` and marked NOT enforced in the slice descriptions, with their target
|
|
13
|
-
// named. Binding reports PLAY0271/PLAY0268 for them (expected; Screenplay#129
|
|
13
|
+
// named. Binding reports PLAY0271/PLAY0268 for them (expected; Screenplay#129): such a model
|
|
14
14
|
// is design-complete but not binding-ready, and that is reported, never "fixed" by deleting the
|
|
15
15
|
// rules. The past-date rule (`night >= today`) is declarative too: ESM v1 has no runtime date,
|
|
16
16
|
// so binding reports PLAY0268 on it (recorded as blocked, not moved into prose); the rule and its rejection
|
|
@@ -14,8 +14,9 @@ replaced by prose. The runnable counterpart, which holds no stored-state rule, i
|
|
|
14
14
|
`invoicing-dues-example.md`; `scenario-examples.md` copies `ReversingAReceivedPayment` from here.
|
|
15
15
|
|
|
16
16
|
The excerpt's Stage API-availability comment describes the historical Stage 4.24.x
|
|
17
|
-
scaffold. Stage 4.
|
|
18
|
-
available to gap-fill
|
|
17
|
+
scaffold. Stage 4.73.1 pins Arc 22.68.0/Chronicle 19.45.0: protected-read APIs are
|
|
18
|
+
available to gap-fill (the "not in a Stage-rendered application" comment in the source is
|
|
19
|
+
superseded), not emitted protection or `.play` rule admission. The
|
|
19
20
|
original compiled source is retained unchanged.
|
|
20
21
|
|
|
21
22
|
```screenplay expect PLAY0516 test=unbound
|
|
@@ -24,7 +25,7 @@ original compiled source is retained unchanged.
|
|
|
24
25
|
// blockers), so this model compiles but is not executable; the specifications below do not run. The runnable counterpart
|
|
25
26
|
// is invoicing-dues-example.md.
|
|
26
27
|
// Target enforcement of every rule here: Arc [ProtectedDecision] with DecisionRead<T> (Arc v22.39.0
|
|
27
|
-
// or later, not in a Stage-rendered application), or a Chronicle DCB; Screenplay#129
|
|
28
|
+
// or later, not in a Stage-rendered application), or a Chronicle DCB; Screenplay#129.
|
|
28
29
|
|
|
29
30
|
concept InvoiceId : Uuid
|
|
30
31
|
concept MemberId : Uuid
|
|
@@ -107,7 +108,7 @@ module Invoicing
|
|
|
107
108
|
event PaymentReceived
|
|
108
109
|
|
|
109
110
|
slice StateChange SettleOrVoidInvoice
|
|
110
|
-
description "An invoice ends either settled or voided, never both (SettleOrVoid, enforced at append). NOT enforced in the model today: that the invoice exists and is still open (settling) and that only an open, unpaid invoice may be voided. Stated as `reads OpenInvoice` + `require` (PLAY0271/PLAY0268 at binding; Screenplay#129
|
|
111
|
+
description "An invoice ends either settled or voided, never both (SettleOrVoid, enforced at append). NOT enforced in the model today: that the invoice exists and is still open (settling) and that only an open, unpaid invoice may be voided. Stated as `reads OpenInvoice` + `require` (PLAY0271/PLAY0268 at binding; Screenplay#129). Target: Arc [ProtectedDecision] with DecisionRead, or a Chronicle DCB. Requirements to test in the target: settling an unknown invoice is rejected; voiding a paid invoice is rejected; voiding an open invoice succeeds."
|
|
111
112
|
command SettleInvoice
|
|
112
113
|
invoiceId InvoiceId identifier
|
|
113
114
|
reads OpenInvoice as invoice by invoiceId // stated intent, unprotected (PLAY0271 at binding)
|
|
@@ -259,6 +259,7 @@ module Invoicing
|
|
|
259
259
|
amount Decimal
|
|
260
260
|
query OpenInvoiceById => OpenInvoice optional
|
|
261
261
|
by invoiceId InvoiceId
|
|
262
|
+
query ListOpenInvoices => OpenInvoice[]
|
|
262
263
|
projection OpenInvoices => OpenInvoice
|
|
263
264
|
from InvoiceIssued
|
|
264
265
|
invoiceId = $eventSourceId
|
|
@@ -338,6 +339,34 @@ module Invoicing
|
|
|
338
339
|
arguments
|
|
339
340
|
invoiceId = "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
340
341
|
|
|
342
|
+
specification OpenInvoicesListHoldsTheIssuedInvoice
|
|
343
|
+
description "The unkeyed list query returns one row per open invoice; each row states the read-model identifier."
|
|
344
|
+
given caller
|
|
345
|
+
authenticated
|
|
346
|
+
role "Accounts"
|
|
347
|
+
given InvoiceIssued
|
|
348
|
+
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
349
|
+
member = "6f1c2a8e-0b1d-4d55-9a3e-2f6a7c1d0e11"
|
|
350
|
+
amount = 130
|
|
351
|
+
then query ListOpenInvoices
|
|
352
|
+
result
|
|
353
|
+
invoiceId = "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
354
|
+
member = "6f1c2a8e-0b1d-4d55-9a3e-2f6a7c1d0e11"
|
|
355
|
+
amount = 130
|
|
356
|
+
|
|
357
|
+
specification OpenInvoicesListIsEmptyAfterPayment
|
|
358
|
+
description "A paid invoice leaves the list: a query with no result block is the empty list."
|
|
359
|
+
given caller
|
|
360
|
+
authenticated
|
|
361
|
+
role "Accounts"
|
|
362
|
+
given InvoiceIssued
|
|
363
|
+
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
364
|
+
member = "6f1c2a8e-0b1d-4d55-9a3e-2f6a7c1d0e11"
|
|
365
|
+
amount = 130
|
|
366
|
+
when append PaymentReceived
|
|
367
|
+
for "9c1f0a52-6a4e-4b1c-9f55-0d2c7b8e1a01"
|
|
368
|
+
then query ListOpenInvoices
|
|
369
|
+
|
|
341
370
|
slice StateChange TopUpCredit
|
|
342
371
|
description "Adds credit to a member. Why an amount above zero: a zero top-up changes nothing and hides a mistake."
|
|
343
372
|
command TopUpCredit
|
|
@@ -412,6 +441,6 @@ module Invoicing
|
|
|
412
441
|
- The command that reverses a payment, the refund reaction and their specifications
|
|
413
442
|
(`ReversingAReceivedPayment`, `RequestingARefundAfterAReversal`) are in
|
|
414
443
|
`invoicing-dues-design.md`, because the command needs a stored-state rule.
|
|
415
|
-
- The query answers "absent" with no `result` block
|
|
416
|
-
|
|
417
|
-
4.66.0
|
|
444
|
+
- The query answers "absent" with no `result` block. The `ListOpenInvoices` list query and its two
|
|
445
|
+
specifications bind and run (list queries bind since Screenplay 4.105.0; they compiled but did
|
|
446
|
+
not bind at 4.66.0); only `filter`, `scoped to` and `performer` queries stay design-mode: see `view-and-story-specs.md`.
|
|
@@ -15,15 +15,14 @@ Source: TrogonStack/agentskills at `7b249d3ee42d8b7e11fa564141ebd5fbc37aadf1`, M
|
|
|
15
15
|
| same file, Quality Checklist and Gherkin Best Practices (explicit givens, explicit outcomes, named reasons), and its Workflow sections 1-5 (command, state validation, view, error path, compensation) | `SKILL.md` "Quality checklist", `references/scenario-examples.md` "Good and bad forms" and categories | Mapped onto `.play` specification style (exact events, pinned messages, `for`, one behavior per spec) |
|
|
16
16
|
| same file, Scenario Organization (happy path, validation, state violation, duplicates, alternatives, error handling, compensation) | `references/scenario-catalogue.md` ordering, `references/scenario-examples.md` categories | Extended with denial, competing claim, ordering, evolution and view types |
|
|
17
17
|
|
|
18
|
-
## Adapted closely (Martin Dilger and Nebulit GmbH
|
|
18
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
19
19
|
|
|
20
20
|
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
21
|
-
by Martin Dilger and Nebulit GmbH (https://nebulit.de)
|
|
22
|
-
is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
21
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
|
|
23
22
|
|
|
24
23
|
| Source file | Used in | How |
|
|
25
24
|
|---|---|---|
|
|
26
|
-
| `.claude/skills/eventmodeling-elaborating-scenarios/SKILL.md`: Interview Phase, Workshop Facilitation Guide, Multi-Role Review, Common Workshop Mistakes, Tips for Rapid Creation | `SKILL.md` "Interview phase", `references/scenario-workshop.md` | Text shared with TrogonStack's version (rows above, MIT; rationale, "what if" capture and multi-role review passages are not Nebulit-only); the Nebulit file is recorded here for completeness. Time-boxes and
|
|
25
|
+
| `.claude/skills/eventmodeling-elaborating-scenarios/SKILL.md`: Interview Phase, Workshop Facilitation Guide, Multi-Role Review, Common Workshop Mistakes, Tips for Rapid Creation | `SKILL.md` "Interview phase", `references/scenario-workshop.md` | Text shared with TrogonStack's version (rows above, MIT; rationale, "what if" capture and multi-role review passages are not Nebulit-only); the Nebulit file is recorded here for completeness. Time-boxes and the three-to-five quota are kept only as optional pacing (`scenario-workshop.md` "Optional pacing"), subordinate to the coverage matrix |
|
|
27
26
|
| same file: GWT vs. Storyline decision rule, Workflow 0 (decide per read model before drafting any payload; one reused schema may indicate a skipped judgment), todo lists as the prime storyline candidate, repeated event type as a driver | `SKILL.md` Procedure 5, `references/view-and-story-specs.md` "Worked family: a todo list" | Restored from #493 and adapted closely; storylines become lifecycle families of independent specs because Screenplay has no multi-step specification (Screenplay#394); storyline JSON, beats and layout dropped (board transport) |
|
|
28
27
|
| same file: Scenario Types (seven questions, "not a good/bad pair", skip only for a domain reason) | `references/scenario-catalogue.md` | Idea; our own, broader catalogue kept |
|
|
29
28
|
| same file: Quality Checklist (no command has only two scenarios; read models a separate, equally mandatory pass; why behind rules documented) | `SKILL.md` "Quality checklist" | Adapted closely; board posting and `expectEmptyList` items dropped |
|
package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-catalogue.md
CHANGED
|
@@ -45,7 +45,7 @@ name them as unfinished.
|
|
|
45
45
|
order, with full payloads and `for`. See `ReservingAGuestBerth`.
|
|
46
46
|
- Traps: asserting a subset of events (lists are exact); leaving out `given caller` on a gated
|
|
47
47
|
command; omitting `for` so the event lands on an allocated source.
|
|
48
|
-
- Generated values and responses (ESM v7, standalone Screenplay 4.68.0; syntax in `cratis-screenplay-specifications`):
|
|
48
|
+
- Generated values and responses (ESM v7, standalone Screenplay 4.68.0 and later; syntax in `cratis-screenplay-specifications`):
|
|
49
49
|
when the command has a `generated` property, the happy path supplies its fixtures (`for` on the generated
|
|
50
50
|
identifier, `generated <name> = <value>`); only when the command declares a response does it assert
|
|
51
51
|
`then returns` (a return expectation without a response is rejected at compile time). Add the failing
|
|
@@ -90,11 +90,11 @@ name them as unfinished.
|
|
|
90
90
|
spec, not `then denied`); denial only when the whole gate is false.
|
|
91
91
|
- Ownership policies (`claim ... matches subject|<property>`): the denial gives the right role
|
|
92
92
|
and a claim with another value (`claim "ownerId" = "<other id>"`); the success spec gives the
|
|
93
|
-
matching value. Both are needed. Ownership checks on Uuid
|
|
94
|
-
|
|
93
|
+
matching value. Both are needed. Ownership checks on text, Uuid, Date and DateTime subjects render at Stage 4.73.1;
|
|
94
|
+
other subjects are STAGE-ESM-015: note it.
|
|
95
95
|
- Traps: `then error` for a denial; a denial spec whose inputs also break a rule (it still
|
|
96
|
-
denies, but reads ambiguously); trusting a `cratis run` sandbox answer (
|
|
97
|
-
|
|
96
|
+
denies, but reads ambiguously); trusting a `cratis run` sandbox answer (the default engine's enforcement is unverified here;
|
|
97
|
+
the opt-in semantic engine enforces both but reads forgeable caller headers, so it is no security boundary); counting another command's denial.
|
|
98
98
|
|
|
99
99
|
## 4. State violation
|
|
100
100
|
- Ask: "After which earlier facts must this request be refused?"
|
|
@@ -151,7 +151,8 @@ name them as unfinished.
|
|
|
151
151
|
all conditions are false the unconditional productions still occur. See
|
|
152
152
|
`RecordingACleanDeparture` (only `BoatDeparted`) and `RecordingADepartureWithDamage` (both).
|
|
153
153
|
- Zero new facts: a command whose productions are all conditional may be accepted with no
|
|
154
|
-
facts.
|
|
154
|
+
facts. `then no events` parses but binding refuses it with PLAY0268 (#433): state the zero-fact outcome through a
|
|
155
|
+
read-model or query assertion, and an action with no outcome at all does not bind. A command spec with no `then` events but with a
|
|
155
156
|
view or query assertion is still executable as a zero-fact check: the runner compares the
|
|
156
157
|
command's facts with the (empty) expected list by exact count, so any fact produced fails it
|
|
157
158
|
(Screenplay v4.66.0). Write it that way, name it for the zero-fact outcome, and keep the view
|
package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
|
|
13
13
|
Compact examples for each scenario category, in one invoicing domain so the shapes compare
|
|
14
14
|
easily. Every excerpt below is copied verbatim from the complete document in
|
|
15
|
-
`invoicing-dues-example.md`, which compiles with warnings as errors and whose
|
|
16
|
-
pass in the reference evaluator; it also holds the declarations the excerpts depend on. The two
|
|
15
|
+
`invoicing-dues-example.md`, which compiles with warnings as errors and whose 23 specifications
|
|
16
|
+
pass in the reference evaluator (standalone 4.139.0); it also holds the declarations the excerpts depend on. The two
|
|
17
17
|
compensation excerpts in section 4 come from `invoicing-dues-design.md` instead: that document
|
|
18
18
|
holds the stored-state rules (`reads` + `require`), compiles but does not bind (PLAY0271,
|
|
19
19
|
PLAY0268), so its specifications are design mode and do not run. A second
|
|
@@ -207,4 +207,4 @@ specification MemberCreditAccumulatesTopUps
|
|
|
207
207
|
A list query asserts one `result` block per expected row (count and order are exact), and the
|
|
208
208
|
empty-list intent is a separate claim from a keyed row being absent (`view-and-story-specs.md`
|
|
209
209
|
"Removal is a positive obligation"). The backing example proves the keyed forms only; whole-list
|
|
210
|
-
queries stay design-mode expectations
|
|
210
|
+
queries are executable too (`ListOpenInvoices` in the backing example); only `filter`, `scoped to` and `performer` queries stay design-mode expectations recorded in the coverage matrix.
|