@cratis/pi 7.33.0 → 7.34.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/corpus/agents/screenplay-modeler.md +1 -1
- package/package/corpus/agents/screenplay-renderer.md +1 -1
- package/package/corpus/agents/screenplay-reviewer.md +1 -1
- package/package/corpus/agents/slice-implementer.md +1 -1
- package/package/corpus/rules/profiles.md +1 -0
- package/package/corpus/skills/cratis-application-slice-conformance/LICENSE +2 -2
- package/package/corpus/skills/cratis-application-slice-conformance/SKILL.md +5 -0
- package/package/corpus/skills/cratis-application-slice-conformance/references/checklists.md +12 -0
- package/package/corpus/skills/cratis-application-slice-conformance/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-application-slice-specifications/LICENSE +2 -2
- package/package/corpus/skills/cratis-application-slice-specifications/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-arc-react-page/LICENSE +2 -2
- package/package/corpus/skills/cratis-arc-react-page/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-chronicle-event-modeling/SKILL.md +12 -6
- package/package/corpus/skills/cratis-chronicle-reactor/LICENSE +2 -2
- package/package/corpus/skills/cratis-chronicle-reactor/SKILL.md +5 -2
- package/package/corpus/skills/cratis-chronicle-reactor/references/provenance.md +3 -3
- package/package/corpus/skills/cratis-chronicle-reactor/references/slice-delivery-checklist.md +93 -0
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/LICENSE +2 -2
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/SKILL.md +1 -1
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/provenance.md +3 -3
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/view-lifecycle-checks.md +79 -0
- package/package/corpus/skills/cratis-event-model-diagram/LICENSE +7 -0
- package/package/corpus/skills/cratis-event-model-diagram/SKILL.md +26 -2
- package/package/corpus/skills/cratis-event-model-diagram/references/provenance.md +19 -0
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +14 -9
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +5 -5
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/public-events-and-direction.md +1 -2
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +9 -5
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +6 -6
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translate-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +14 -13
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +12 -13
- package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +3 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +2 -2
- package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +4 -2
- package/package/corpus/skills/cratis-screenplay-delivery-planning/LICENSE +9 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/SKILL.md +118 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/parallel-delivery.md +45 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/provenance.md +29 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/slice-counting.md +43 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/velocity-and-capacity.md +48 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/verification.json +16 -0
- package/package/corpus/skills/cratis-screenplay-discovery/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +6 -5
- package/package/corpus/skills/cratis-screenplay-discovery/references/divergent-sweep.md +1 -0
- package/package/corpus/skills/cratis-screenplay-discovery/references/domain-analysis-template.md +92 -0
- package/package/corpus/skills/cratis-screenplay-discovery/references/personas-and-causes.md +2 -2
- package/package/corpus/skills/cratis-screenplay-discovery/references/provenance.md +4 -3
- package/package/corpus/skills/cratis-screenplay-discovery/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-event-modeling/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +28 -28
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +7 -5
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +12 -9
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +26 -13
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/candidate-inventory.md +6 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +7 -0
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/prologue-safety.md +22 -17
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md +2 -2
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/side-car-migration.md +1 -0
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +2 -2
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +3 -3
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +3 -1
- package/package/corpus/skills/cratis-screenplay-model-review/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +8 -8
- package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +2 -2
- package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +4 -4
- package/package/corpus/skills/cratis-screenplay-model-review/references/model-inventory-report.md +75 -0
- package/package/corpus/skills/cratis-screenplay-model-review/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-screenplay-model-review/references/public-keys-and-routes.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-review/references/worked-example.md +4 -3
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +7 -5
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/core-rules-digest.md +131 -0
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/phases.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/provenance.md +25 -4
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/reasoning-notes.md +2 -2
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/verdicts-and-modes.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +5 -4
- package/package/corpus/skills/cratis-screenplay-projections/SKILL.md +9 -5
- package/package/corpus/skills/cratis-screenplay-projections/references/pdl-grammar.md +4 -2
- package/package/corpus/skills/cratis-screenplay-read-surface/LICENSE +7 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +16 -8
- package/package/corpus/skills/cratis-screenplay-read-surface/references/provenance.md +21 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/references/screen-patterns.md +130 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +58 -46
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/delivery-protocol.md +17 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/drift-and-ledger.md +19 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +22 -4
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +21 -16
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/worked-example.md +34 -29
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +5 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +1 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +5 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-example.md +32 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-catalogue.md +7 -6
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md +3 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-workshop.md +15 -7
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +8 -7
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/view-and-story-specs.md +6 -4
- package/package/corpus/skills/cratis-screenplay-slice-design/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +4 -3
- package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +2 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/references/derived-condition-events.md +68 -0
- package/package/corpus/skills/cratis-screenplay-slice-design/references/field-lineage.md +1 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/provenance.md +5 -5
- package/package/corpus/skills/cratis-screenplay-slice-design/references/read-model-design.md +17 -0
- package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +6 -6
- package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +3 -3
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +6 -4
- package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +2 -1
- package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md +3 -2
- package/package/corpus/skills/cratis-screenplay-specifications/references/persona-callers-and-cases.md +3 -0
- package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +3 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +9 -9
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +31 -3
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/chronicle-boundaries.md +6 -6
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +12 -11
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/evolution.md +1 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/provenance.md +4 -4
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +14 -12
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +3 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +3 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +24 -16
- package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +41 -12
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +5 -5
- package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +14 -9
- package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +9 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +4 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +10 -10
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/flow-review.md +1 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +39 -14
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/worked-flow.md +17 -9
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +83 -74
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +62 -12
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/render-example.md +3 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +30 -15
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +21 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +8 -3
- package/package/profile-catalog.json +1 -0
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: cratis-stage-rendering-and-sandbox
|
|
3
|
-
description: "What Cratis Stage and `cratis render` actually do with a Screenplay `.play` model today: the model shape Stage
|
|
3
|
+
description: "What Cratis Stage and `cratis render` actually do with a Screenplay `.play` model today: the model shape the current Stage admits and refuses (`STAGE-ESM-*`, `PLAY0268` render refusals), what it emits (C# Arc/Chronicle backend, React/Vite scaffold with Arc `CommandForm` shell emission over Scene typed bindings, Debug specifications), managed publication, `--force`, recovery, scoped renders (`--scope`) and `--check`, authored-UI omission/parity checks, the unmanaged `Customizations/` seam, and the `cratis/stage` sandbox and `cratis/stage-specrunner` job. Use when deciding whether Stage can render a model, reading a blocked render, re-rendering safely, checking generated/runtime screen parity, or running the sandbox. Not for: authoring the model (use `cratis-screenplay-model-authoring`) or the render and gap-fill workflow (use `cratis-screenplay-render-and-gap-fill`)."
|
|
4
4
|
license: MIT
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@ exactly produces **no artifacts at all**, never thinner ones. Read the admission
|
|
|
16
16
|
before promising that a model can be rendered, and render it to find out: the source
|
|
17
17
|
reading in this skill is not a render result.
|
|
18
18
|
|
|
19
|
-
Authored UI has its own parity hazard. Stage 4.24 rendered a default React/Vite
|
|
19
|
+
Authored UI has its own parity hazard. Historically (Stage 4.24) Stage rendered a default React/Vite
|
|
20
20
|
scaffold and did not prove that modeled screens, templates, forms, toolbars,
|
|
21
21
|
components, outlets, package icons or routes were implemented. The first fully
|
|
22
22
|
passing public browser vector was CLI 3.40.7 with `cratis/stage:4.51.1`: 51
|
|
@@ -40,27 +40,27 @@ argument or an invalid semantic option.
|
|
|
40
40
|
|
|
41
41
|
## Verified product sources
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
[
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
test-account decision, so Studio production Play proof is not claimed.
|
|
43
|
+
Current pins and the tool split: `cratis-screenplay-toolchain/references/versions.md`. Facts here
|
|
44
|
+
were read at Stage `v4.73.1` (`Source/Rendering.Cratis/**`, `Documentation/guides/build-renderer-target.md`,
|
|
45
|
+
`Documentation/reference/render-plans.md`, `Documentation/docker/**`) and cli `v3.53.1`
|
|
46
|
+
(`Documentation/reference/screenplay.md`, `Source/Cli/Commands/Render/**`), not by a render run
|
|
47
|
+
unless a line says *observed*. CLI 3.53.1 bundles a Screenplay and Stage listed in `cratis-screenplay-toolchain` `references/versions.md`, so its
|
|
48
|
+
binder is behind the standalone compiler. Stage's scaffold pins Arc, Chronicle, Components, Scene and
|
|
49
|
+
Fundamentals releases (listed in the rendered application reference). These are **not** the latest releases; do not bump them in managed files
|
|
50
|
+
([rendered application](references/rendered-application.md)).
|
|
51
|
+
|
|
52
|
+
Historical executed baselines (history, not current claims): Stage `v4.24.2` and cli
|
|
53
|
+
`v3.28.2`/`v3.28.3` (Cratis/cli#253; the example in [render-example.md](references/render-example.md)),
|
|
54
|
+
cli 3.40.7 with Stage 4.51.1 (first fully passing browser vector, Cratis/Screenplay#605) and
|
|
55
|
+
CLI 3.43.0 (bundled Screenplay 4.127.0) with Stage 4.52.0. UI-profile refusal and rendered recovery
|
|
56
|
+
shipped in Cratis/cli#301. Case tables (Stage 4.59.0+) and whole numbers as `long` from ESM v8
|
|
57
|
+
(4.61.0+) apply to the current default; the pinned Stage default applies both rules. The Stage
|
|
58
|
+
4.52.0 renderer applies neither new rule.
|
|
59
|
+
|
|
60
|
+
`[ProtectedDecision]` and `DecisionRead<T>` are available to gap-fill code, not automatically
|
|
61
|
+
emitted or protected by Stage; admission and unit-of-work enrollment still matter. Studio 0.144.4 is
|
|
62
|
+
released, but production answers every unauthenticated request with 401 and the production UI
|
|
63
|
+
automation needs a test-account decision, so Studio production Play proof is not claimed.
|
|
64
64
|
|
|
65
65
|
## Model-first rule
|
|
66
66
|
|
|
@@ -90,8 +90,9 @@ backups). Never stage `.cratis-render/` in git; commit the manifest with the out
|
|
|
90
90
|
- An unchanged re-render writes nothing (`unchanged` equals the artifact count).
|
|
91
91
|
- Use exclusive access to the destination; a receipt is a filesystem result, not a Git
|
|
92
92
|
commit, and the command creates no branch, commit or PR.
|
|
93
|
-
- Drift:
|
|
94
|
-
|
|
93
|
+
- Drift: `cratis render ... --check` (CLI 3.44.0 or later) is the first probe; exit `6` means
|
|
94
|
+
pending changes. Otherwise compare successive manifests' `semanticRevision` for renders with the
|
|
95
|
+
same `--name` and inputs. Do not compare the MCP `modelRevision` with the manifest: their
|
|
95
96
|
application identities can differ.
|
|
96
97
|
|
|
97
98
|
## Rendering with `cratis render`
|
|
@@ -109,8 +110,22 @@ cratis render --workspace ./application.workspace.json --destination ./out
|
|
|
109
110
|
| `--destination <DIR>` | Publication directory, default `./out`. It never defines identity |
|
|
110
111
|
| `--target` | Only `cratis` is bundled |
|
|
111
112
|
| `--project-name`, `--root-namespace` | Rendering overrides (dot-separated C# identifiers); do not change identity |
|
|
113
|
+
| `--scope <ADDRESS>` | Render only a module, feature or slice (`Module[.Feature…][.Slice]`, exact case); repeatable. See "Scoped renders" |
|
|
114
|
+
| `--check` | Plan against the real destination without writing: exit `0` current, `6` changes pending, `5` planning, refusal or pending recovery. Combine with `--scope` and `--force` |
|
|
115
|
+
| `--package-set <FILE>` | Approved package set (JSON) of custom runtime packages the `ui profile` may use; the frontend installs exactly these |
|
|
112
116
|
| `--force` | See "Publication and recovery" |
|
|
113
117
|
|
|
118
|
+
### Scoped renders
|
|
119
|
+
|
|
120
|
+
`--scope` (CLI 3.49.0 or later) renders an admitted part while other slices wait for hand-written
|
|
121
|
+
code or renderer support. The whole model must still compile and bind, so a `PLAY0268`, `pii`/`secret`,
|
|
122
|
+
handler or ESM v11+ problem anywhere blocks even a scoped render. `PLAN-*` problems in unselected
|
|
123
|
+
slices become warnings and `STAGE-ESM-*` refusals in unselected slices do not block. A scoped plan
|
|
124
|
+
has no application scaffold or default Scene (with no manifest in the destination the plain scaffold
|
|
125
|
+
is added). A dependency in another slice must be rendered first or listed too (`CLI-RENDER-014`);
|
|
126
|
+
unknown scope `-011`, ambiguous `-012`, aggregate policy layout `-013` (render the whole application
|
|
127
|
+
once first). Unselected managed files are preserved. A scoped result is evidence for that scope only.
|
|
128
|
+
|
|
114
129
|
Order of events: recover any interrupted earlier publication, compile, bind, build the
|
|
115
130
|
execution plan, plan the target (Stage admission), validate artifacts, then publish.
|
|
116
131
|
Exit `0` is a published render, `5` is a refusal with nothing published (diagnostics are
|
|
@@ -119,13 +134,10 @@ receipt.
|
|
|
119
134
|
|
|
120
135
|
Facts that surprise:
|
|
121
136
|
|
|
122
|
-
- **Binding uses the CLI's bundled Screenplay** (
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
Stage
|
|
126
|
-
4.60.1 binder stopped it first with `PLAY0268`. A model that binds is not necessarily
|
|
127
|
-
renderable: Stage admits ESM v1 to v4, and a v4 model renders only while no selected
|
|
128
|
-
event has evolved (`STAGE-ESM-026`, Stage 4.24.2).
|
|
137
|
+
- **Binding uses the CLI's bundled Screenplay** (the version listed in `cratis-screenplay-toolchain` `references/versions.md`; the standalone tool is
|
|
138
|
+
newer). A model that binds is not necessarily renderable: Stage 4.73.1 admits ESM v1 to v10 by
|
|
139
|
+
version, then refuses each construct it does not render with its own code (below). v11 or newer is
|
|
140
|
+
`CLI-RENDER-004`; direct Stage reports `STAGE-ESM-016`.
|
|
129
141
|
- **Render never builds, tests or runs** the output. A published render is admission and
|
|
130
142
|
publication only; build and tests are separate results (see "Verify"). Admission can be
|
|
131
143
|
green while a rendered Debug test fails (the example hit this with a query assertion).
|
|
@@ -136,49 +148,43 @@ Facts that surprise:
|
|
|
136
148
|
- `cratis render` and `cratis screenplay validate` are different gates: a model can
|
|
137
149
|
validate and still refuse here.
|
|
138
150
|
|
|
139
|
-
##
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
-
|
|
153
|
-
|
|
154
|
-
`
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
building the example are in [references/admission.md](references/admission.md); the exhaustive ledger
|
|
172
|
-
is `references/renderable-subset.md` in `cratis-screenplay-toolchain`.
|
|
173
|
-
Read `cratis-screenplay-toolchain/references/renderable-subset.md` when you need the exhaustive surface ledger beyond the admission summary.
|
|
174
|
-
|
|
175
|
-
Descriptions and documentation are never rendered, so a rule that exists only in prose
|
|
176
|
-
is not enforced in the generated code.
|
|
151
|
+
## Current admission (Stage 4.73.1)
|
|
152
|
+
|
|
153
|
+
Source reading, not a render run. One blocking diagnostic fails the whole selected scope and
|
|
154
|
+
publishes nothing. Codes and fixes: [references/admission.md](references/admission.md); the
|
|
155
|
+
exhaustive ledger is `cratis-screenplay-toolchain/references/renderable-subset.md`.
|
|
156
|
+
|
|
157
|
+
- **Renders:** concepts, composite types, collections, optionals; `StateChange` slices (one command,
|
|
158
|
+
unconditional `produces`, portable validation); `StateView` slices with flat or scoped
|
|
159
|
+
projections and pure reducers (reducer `from` filters render); keyed optional snapshot queries and
|
|
160
|
+
**observable** list queries (keyed or unkeyed); authorization (role-only, authenticated, opaque
|
|
161
|
+
pure policies, claim conditions, `not`/and/or; roles read through the identity's `RoleClaimType`);
|
|
162
|
+
unique constraints; named event sources, streams and routes (ESM v8); case tables; whole numbers
|
|
163
|
+
as `long`; modeled specifications as Debug xunit classes; authored UI through Scene.
|
|
164
|
+
- **Refused with a code:** `Automation` and `Translate` slices, reactions, captures, triggers and clock
|
|
165
|
+
specifications (`STAGE-ESM-024`); a reaction that both produces events and invokes commands
|
|
166
|
+
(`STAGE-ESM-037`); generated command values (`-028`) and responses (`-029`); `then no readmodel` (`-027`);
|
|
167
|
+
evolved events (`-026`); public events and event-target projections (`-032`); foreign origins and
|
|
168
|
+
event-source captures (`-033`); reaction `runsAs`, `from` filters and per-production route overrides
|
|
169
|
+
(`-034`, `-035`, `-036`); code validation (`-005`); a non-observable list query (`-010`);
|
|
170
|
+
`produces when`, composite-key projections, `all`. Reducer filters render. The CLI/Stage pair reaches
|
|
171
|
+
construct checks through v10; a bound v11 model is `CLI-RENDER-004`.
|
|
172
|
+
- **Refused at binding (`PLAY0268`/`PLAY0271`):** `reads`, `concurrency`, command `handler`s,
|
|
173
|
+
`filter`, `scoped to`, `performer` and composite `by` queries, `pii`/`secret` compliance markers.
|
|
174
|
+
|
|
175
|
+
A refusal is not a licence to weaken the model: drop no specification, event generation or
|
|
176
|
+
protection to get a render; keep the model, record the capability gap and gap-fill. The 4.24-era
|
|
177
|
+
admission (ESM v1 to v4, keyed optional queries only) is kept as history in `references/admission.md`.
|
|
178
|
+
|
|
179
|
+
**Descriptions and documentation render only as XML documentation comments** (`<summary>`,
|
|
180
|
+
`<remarks>`; Stage#178 closed), never as validation, authorization or behavior, so a rule that exists
|
|
181
|
+
only in prose is not enforced. A documentation edit changes managed-file hashes (a `--check` exit
|
|
182
|
+
`6`), and characters invalid in XML block rendering with `CLI-RENDER-005`.
|
|
177
183
|
|
|
178
184
|
## What it emits
|
|
179
185
|
|
|
180
186
|
At application scope the plan holds the scaffold plus the modeled artifacts, for the
|
|
181
|
-
example 30 files: a `.csproj` and `.slnx`, `Program.cs`, `appsettings.json`,
|
|
187
|
+
example 30 files on cratis 3.28.2 (56 observed on 3.53.1): a `.csproj` and `.slnx`, `Program.cs`, `appsettings.json`,
|
|
182
188
|
`docker-compose.yml`, the Directory props files, a policy registration and generated
|
|
183
189
|
policies, `Common/<Concept>.cs`, one `<Module>/<Feature>/<Slice>/` folder per slice with
|
|
184
190
|
the `[Command]` record and `Handle()`, the `[EventType]` event, the validator and the
|
|
@@ -204,7 +210,7 @@ Stage 4.52.0 renderer applies neither new rule. Read
|
|
|
204
210
|
for complete examples, stored-schema consequences and the sandbox-only `--tag` override.
|
|
205
211
|
|
|
206
212
|
For UI, record what the generated output claims separately from what the model
|
|
207
|
-
authored.
|
|
213
|
+
authored. Before CLI 3.40.7 the generated scaffold was not screen parity evidence.
|
|
208
214
|
On public CLI 3.43.0 / `cratis/stage:4.52.0` the canonical corpus publishes,
|
|
209
215
|
`scene.json` contains Arc `commandForm` components, `src/bindings.ts` registers
|
|
210
216
|
the modeled commands and queries, and the browser acceptance run passes. That is
|
|
@@ -220,7 +226,9 @@ API on `9090`, Chronicle Workbench on `https://localhost:35000`. It is a **parti
|
|
|
220
226
|
disposable runtime**, not a generated application. The default engine appends modeled
|
|
221
227
|
`produces` facts and echoes the payload but enforces no modeled validation or
|
|
222
228
|
authorization and no query authorization; `Stage__Runtime__Engine=semantic` opts in to
|
|
223
|
-
an engine that does, and refuses what it cannot execute (HTTP 501).
|
|
229
|
+
an engine that does, and refuses what it cannot execute (HTTP 501). At Stage 4.73.1 the default
|
|
230
|
+
engine also refuses routed models (`STAGE-ESM-030`) and the structural runner is deprecated (details:
|
|
231
|
+
the sandbox reference). Callers are built
|
|
224
232
|
from unsigned headers, so authorization there is not a security boundary.
|
|
225
233
|
|
|
226
234
|
`cratis/stage-specrunner` checks modeled specifications and writes a results file. The
|
|
@@ -233,7 +241,8 @@ Read `references/sandbox-and-specrunner.md` before launching either container or
|
|
|
233
241
|
## Verify
|
|
234
242
|
|
|
235
243
|
- `cratis render` exits 0 and reports `recovered: false`, with `written + unchanged`
|
|
236
|
-
equal to the artifact count; otherwise the render is not a
|
|
244
|
+
equal to the artifact count (for `--scope`, the scope's artifacts); otherwise the render is not a
|
|
245
|
+
result. State the scope in the V5 report.
|
|
237
246
|
- Report V5 as separate results, each a result or "not run": admission, publication,
|
|
238
247
|
Debug build (`dotnet build <destination>/<Project>.csproj -c Debug`), Debug tests
|
|
239
248
|
(`dotnet test` on the same project) and runtime. Render alone is the first two.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Stage admission: codes, specification rules and observed refusals
|
|
2
2
|
|
|
3
3
|
## Contents
|
|
4
4
|
|
|
@@ -8,8 +8,14 @@
|
|
|
8
8
|
- Specification rules (`STAGE-ESM-011`)
|
|
9
9
|
- Observed refusals
|
|
10
10
|
- Source disagreements (trust the code)
|
|
11
|
+
- Historical Stage 4.24 admission
|
|
11
12
|
|
|
12
|
-
Current pins: `cratis-screenplay-toolchain/references/versions.md`.
|
|
13
|
+
Current pins: `cratis-screenplay-toolchain/references/versions.md`. The current statements here
|
|
14
|
+
were read at Stage `v4.73.1` (`Documentation/guides/build-renderer-target.md`,
|
|
15
|
+
`SemanticVersionFeatures.cs`, `SemanticCratisAdmission*.cs`) and cli `v3.53.1`; the rows and
|
|
16
|
+
sections marked *historical* or naming Stage 4.24 or cratis 3.27/3.28 are earlier probes kept as
|
|
17
|
+
history. Stage 4.73.1 admits ESM v1 to v10 by version, and the CLI 3.53.1 bundle (Screenplay
|
|
18
|
+
4.137.0) binds through v10 for rendering.
|
|
13
19
|
The pinned CLI admits through ESM v10 to construct planning; a bound newer model
|
|
14
20
|
gets CLI-RENDER-004. Binding with the bundled compiler is a separate prerequisite.
|
|
15
21
|
The pinned Stage's `SemanticVersionFeatures`/`SemanticVersionFeatureAdmission` refuse
|
|
@@ -25,8 +31,8 @@ checks are CLI `RenderedSemanticVersions.Newest` and Stage
|
|
|
25
31
|
parser rejected `runs as` with PLAY0137; that is not a current parser refusal.
|
|
26
32
|
The historical CLI 3.41.0 v7 canonical-corpus planning spec received
|
|
27
33
|
STAGE-ESM-028/029 for generated values/responses.
|
|
28
|
-
The detailed 4.24.x source/probe rows below
|
|
29
|
-
|
|
34
|
+
The detailed 4.24.x source/probe rows below are historical unless a row says 4.73.1; run
|
|
35
|
+
admission on the actual bundled renderer.
|
|
30
36
|
|
|
31
37
|
Read at Stage `v4.24.0`, re-read at `v4.24.1` and `v4.24.2` (`SemanticCratisAdmission.EventRevisions.cs`, `SemanticEventLineageAdmission.cs`, ESM v4 section of `Documentation/guides/build-renderer-target.md`) (`Source/Rendering.Cratis/Semantics/SemanticSurfaceLedger.cs`, `Documentation/guides/build-renderer-target.md`; 4.24.1 changed only the ledger, dependency pins and the Dockerfile) (`Source/Rendering.Cratis/CratisArtifactRenderPlanner.cs`,
|
|
32
38
|
`Semantics/SemanticCratisAdmission*.cs`, `SemanticSpecificationAdmission*.cs`,
|
|
@@ -62,25 +68,38 @@ model owner's decision.
|
|
|
62
68
|
| `STAGE-ESM-005` | Code validation or rule predicate bodies; or a command beyond the first capability (optional event property, event revision other than the first, validation or requirement that cannot be rendered, no `produces`) | Use declarative validation; non-initial event generations are not rendered |
|
|
63
69
|
| `STAGE-ESM-006` | `produces` that cannot render without changing its destination or mappings (`produces when`, literal or computed mappings, `for` not a command identifier, mappings not one-to-one with event properties, duplicate tags) | Map properties one to one; conditional outcomes (`produces when`) are a different behavior, so gap-fill unless the owner accepts splitting them into commands |
|
|
64
70
|
| `STAGE-ESM-007`, `-008`, `-009` | Projection count per read model (exactly one projection or reducer each); unresolvable properties or no single read-model transition (**flat** projections only); affected instance not one, not keyed by an event property, or not the event-source identity (flat projections only) | One projection per read model; see "Projections" below |
|
|
65
|
-
| `STAGE-ESM-010` | A query is
|
|
71
|
+
| `STAGE-ESM-010` | A query is neither an optional snapshot lookup by the read-model identifier nor an observable collection query (a snapshot list, or an argument concept with validation); each query is checked on its own. Observable list queries (keyed or unkeyed) render since Stage 4.49.0 | Keyed `XById => X optional` queries or `observable` lists; a snapshot list is gap-fill. `filter`, `scoped to`, `performer` queries do not bind (`PLAY0268`) |
|
|
66
72
|
| `STAGE-ESM-011` | A specification cannot render (see the rules below) | Reshape it only if the assertion keeps its meaning; otherwise keep the specification, record the gap, and gap-fill with the specification as the oracle. Never weaken or delete it to get a render |
|
|
67
73
|
| `STAGE-ESM-012` | Generated C# names collide (properties, types, namespaces, constraints) | Rename |
|
|
68
74
|
| `STAGE-ESM-013` | An event-context value other than `$context.occurred` mapped in `produces` | Map a command property when that preserves the meaning; otherwise gap-fill |
|
|
69
75
|
| `STAGE-ESM-014` | A constraint Chronicle cannot reproduce (kind, scope, message; multi-claim in one command; optional or composite targets) | A different constraint is a requirement change for the model owner; otherwise gap-fill |
|
|
70
|
-
| `STAGE-ESM-015` | Authorization Stage cannot render exactly
|
|
71
|
-
| `STAGE-ESM-016` | Model language or semantic version is
|
|
76
|
+
| `STAGE-ESM-015` | Authorization Stage cannot render exactly (4.73.1): a role-claim URI, an opaque policy nested inside a condition, an unresolved or non-portable policy, no single identifier, an opaque-policy subject that is not text, Uuid, Date or DateTime (Stage 4.73.1 `IsTextualSubject`; a restriction on opaque-policy subjects, separate from declarative claim targets), an unsupported claim artifact. Role-only, authenticated, opaque pure policies, claim conditions with Uuid, Date, DateTime or text targets (numeric and Boolean claim matches render as always false; Stage 4.73.1 `IsSupportedClaimPath`) and `not`/and/or render; roles are read through the identity's `RoleClaimType` | Reshape the policy to a portable condition; otherwise gap-fill. *Historical (4.24/3.27.1):* a role alone, an opaque policy or a Uuid-backed claim were refused here |
|
|
77
|
+
| `STAGE-ESM-016` | Model language or semantic version is above ESM v10 (Stage 4.73.1 admits v1 to v10 by version; the CLI reports `CLI-RENDER-004` for v11 or newer first). *Historical:* Stage 4.24.2 admitted v1 to v4 and 4.24.1 and earlier v1 to v3 | Not fixable by editing: the model needs a newer renderer. Keep the model, record the gap, gap-fill |
|
|
72
78
|
| `STAGE-ESM-017` | Read model or projection cannot render (property names that collide with Chronicle paths or expression syntax, mappings that overwrite the key or child identity, composite keys, `all`, the refused scope shapes below) | Reshape the projection without changing what it records, or record the gap |
|
|
73
79
|
| `STAGE-ESM-018` | `$strings.` key missing in the default locale or containing formatting characters | Fix the strings |
|
|
74
80
|
| `STAGE-ESM-019` | Reducer structure or body not admitted (outside a `StateView`, impure, does not compile) | An equivalent pure body, or gap-fill |
|
|
75
81
|
| `STAGE-ESM-020` | Implementation body missing, changed (hash differs) or refused by the loader | Provide the body inside the model root |
|
|
76
82
|
| `STAGE-ESM-021`, `-022` | Reducer typed-context or analysis failure; a construct outside the pure allowlist, or a generated name shadowing a reducer type | An equivalent pure body, or gap-fill |
|
|
77
83
|
| `STAGE-ESM-025` | Typed context references a historical event revision or a historical property identity (Stage 4.24.2); checked before `-026` | Reference the current revision; a historical reference is not renderable, so gap-fill |
|
|
78
|
-
| `STAGE-ESM-026` | A selected event, or an event a selected slice depends on (producing command, observing projection or reducer, specification, constraint target), is above its initial revision (Stage 4.
|
|
79
|
-
| `STAGE-ESM-024` |
|
|
84
|
+
| `STAGE-ESM-026` | A selected event, or an event a selected slice depends on (producing command, observing projection or reducer, specification, constraint target), is above its initial revision (still refused at Stage 4.73.1): `Event 'X' has evolved to revision N; Stage does not render event migrations yet.` The whole selection is refused, nothing is emitted | Not fixable by editing without dropping the evolution. Stage#204 (needs Screenplay#71) tracks migration rendering; gap-fill the evolved events and hand-write the migrations (`cratis-chronicle-event-type-migration`). A scoped slice of initial events that depends on no evolved event still renders |
|
|
85
|
+
| `STAGE-ESM-024` | ESM v6 and v9 constructs Stage 4.73.1 does not render: application triggers, interval, schedule, application, startup and shutdown triggers, opaque reaction bodies, every event-triggered reaction, captures, `Automation` and `Translate` slices (including directed Translate), and specifications with a clock, trigger or capture. The renderer, Host and specification executor refuse every reaction model | Keep the model; hand-write the automation or translation (gap-fill) with the model as the contract |
|
|
86
|
+
| `STAGE-ESM-027` | A specification asserting a read model is absent (`then no readmodel`, ESM v5) is not rendered by the renderer (the semantic specification engine executes keyed absence) | Keep the specification; verify absence another way and record the gap |
|
|
87
|
+
| `STAGE-ESM-028`, `-029` | Generated command property values and generation fixtures (ESM v7); command responses and `then returns` expectations (ESM v7) (Stage#175, also reached by `cratis screenplay generate` output from Arc 22.52.0) | Keep the model; gap-fill |
|
|
88
|
+
| `STAGE-ESM-030` | Named event-source or stream definition with a reserved stored name; unformattable routed fixtures; routed read-model or query replay in an unsupported shape. The default sandbox engine also reports it for every routed model | Rename the reserved name; render the model with `cratis render`, not `cratis run` |
|
|
89
|
+
| `STAGE-ESM-031` | Whole-number literal outside the C# `int` range below ESM v8 (v8 and later render `long`) | Raise the model to v8 constructs or gap-fill |
|
|
90
|
+
| `STAGE-ESM-032`, `-033` | Public events and event-target projections or reducers (ESM v9); foreign event origins and event-source captures | Gap-fill |
|
|
91
|
+
| `STAGE-ESM-034`, `-035`, `-036` | Reaction `runsAs` (ESM v10), reaction observer `from` filters, per-production route overrides (reducer `from` filters render) | Gap-fill |
|
|
92
|
+
| `STAGE-ESM-037` | A reaction trigger that both produces events and invokes commands (ESM v6). A Stage refusal (Stage#207), not an Arc or language limit: Arc 22.72.0 and later run one reactor that returns events and commands (events appended first as one batch, then commands in order, no cross-effect transaction) | **Do not split the modeled reaction or drop `produces`/`invokes`.** Keep it and gap-fill it as one reactor on Arc 22.72.0 or later (the Arc the scaffold pins has a command handler that accepts a collection only when every element is a command; a rendered app needs a proven dependency override; see `rendered-application.md` for the pinned Arc) |
|
|
80
93
|
| `STAGE-ESM-023` | Information: transition bodies analysed | none |
|
|
81
94
|
| `STAGE-CRATIS-001` to `-005` | Profile or `scene.json` not the package-owned shape; unrecognized or missing scaffold input; artifact path collision; a modeled module or feature that would render into the reserved `Customizations/` | Rename the module or feature (005) |
|
|
82
95
|
| `STAGE-AUTH-001` | Authorization cannot be rendered faithfully | As `STAGE-ESM-015` |
|
|
83
96
|
| `CLI-RENDER-001`, `-002` | Unknown target; invalid rendering name (`CLI-RENDER-003`, event generations, was reported by cratis 3.28.2 only) | Fix the option, or the model |
|
|
97
|
+
| `CLI-RENDER-004` | The bound model is ESM v11 or newer | Not fixable by editing: keep the model, gap-fill |
|
|
98
|
+
| `CLI-RENDER-005`, `-006` | Authored metadata with characters invalid in XML blocks rendering of XML doc comments; a document set that cannot be read as a workspace renders without comments (warning) | Remove the invalid characters |
|
|
99
|
+
| `CLI-RENDER-007` to `-010` | `ui profile` refusals (package set, profile shape) | See `--package-set` |
|
|
100
|
+
| `CLI-RENDER-011` to `-014` | `--scope`: unknown address; ambiguous feature and slice name; aggregate or unrecognized policy layout (render the whole application once); a dependency not in the manifest or the scope | Fix the address or add the owning scope |
|
|
101
|
+
|
|
102
|
+
`CLI-RENDER-015` (navigation properties) is retired since Stage 4.73.1.
|
|
84
103
|
|
|
85
104
|
`STAGE-CRATIS-FILE-001`, `-INLINE-001`, `-QUERY-001`, `-KEY-001`, `-KEY-002`,
|
|
86
105
|
`-PROJECTION-001` and `STAGE-EVENT-001` come from the legacy syntax renderer and the direct
|
|
@@ -162,7 +181,7 @@ context, no directives, no writes to statics, `throw` limited to
|
|
|
162
181
|
pure expressions, and no generated type shadowing a referenced one. Anything else is
|
|
163
182
|
`STAGE-ESM-019`, `-021` or `-022`. A reducer needs a `StateView` slice, its read model in the
|
|
164
183
|
same slice, a required Guid or text identifier and a matching keyed query. Code validation
|
|
165
|
-
(`STAGE-ESM-005`)
|
|
184
|
+
(`STAGE-ESM-005`) is refused outright (opaque pure policies render at 4.73.1), and a command
|
|
166
185
|
`handler` never binds (`PLAY0268`). Reducer rendering was read, not run, for this skill.
|
|
167
186
|
|
|
168
187
|
## Specification rules (`STAGE-ESM-011`)
|
|
@@ -180,13 +199,13 @@ From `SemanticSpecificationAdmission*.cs`; the first rule was also observed.
|
|
|
180
199
|
when a read-model or reducer expectation must replay them, which needs distinct
|
|
181
200
|
contracts), `then readmodel`, `then query` (one result, scalar key), `then error` naming a
|
|
182
201
|
rendered constraint or an authored message, `then denied`.
|
|
183
|
-
- Refused: `then no readmodel
|
|
202
|
+
- Refused: `then no readmodel` (`STAGE-ESM-027`), an unauthenticated caller carrying roles or claims (`STAGE-ESM-011`), `when append`, composite values, `given readmodel` beside a
|
|
184
203
|
command, error codes that name no rendered constraint, a `$context.occurred` mapping
|
|
185
204
|
asserted without a supplied time, a query on a reducer-built read model, a protected
|
|
186
205
|
query whose fixtures use streams other than the queried key.
|
|
187
206
|
- A when-less specification is admitted only as `then denied` on an authorized keyed
|
|
188
207
|
query, or `given readmodel` plus `then query` on an unprotected query.
|
|
189
|
-
- Descriptions
|
|
208
|
+
- Descriptions and event documentation render only as XML doc comments (Stage 4.73.1); comments are never rendered; neither is behavior.
|
|
190
209
|
|
|
191
210
|
## Observed refusals
|
|
192
211
|
|
|
@@ -206,3 +225,34 @@ Each came from the first draft of the example model, rendered with cratis 3.27.1
|
|
|
206
225
|
| cli reference: bodied reducers are unsupported (`STAGE-ESM-019`) | `PureTransitionAdmission` admits pure allowlisted bodies |
|
|
207
226
|
| Stage customization guide: an Automation slice blocks with `STAGE-ESM-001`; Stage pins Screenplay 4.35.0 | With cli 3.27.1 an Automation or Translate slice failed binding (`PLAY0268`) first; with cli 3.28.2 it binds and Stage refuses the whole model with `STAGE-ESM-016` (probed). Stage 4.24.0 pinned Screenplay 4.60.0 (4.24.1: 4.66.0) |
|
|
208
227
|
| An earlier version of this skill: Stage has no authorization contract for queries | Query authorization is admitted and rendered; an unauthorized query renders `[AllowAnonymous]` (observed) |
|
|
228
|
+
|
|
229
|
+
## Historical Stage 4.24 admission
|
|
230
|
+
|
|
231
|
+
Kept as history. Not a statement about the current Stage (see the 4.73.1 summary in `SKILL.md` and the diagnostic codes above).
|
|
232
|
+
|
|
233
|
+
Whole-model admission needs ESM schema v1 to v4; v5 and v6 are `STAGE-ESM-016`. Stage 4.24.2 admits ESM v4 (Screenplay compiles a model with evolved events to v4): an event at its initial revision renders exactly as before, but any selected event above the initial revision, and every scope depending on it (a command producing it, a projection or reducer observing it, a specification using it), is refused with `STAGE-ESM-026` and nothing is emitted. A typed-context reference to a historical revision or property identity is refused with `STAGE-ESM-025`. Stage cannot render Chronicle event-type migrations yet (Cratis/Stage#204, which depends on Cratis/Screenplay#71), and Stage's runtime (`cratis run`, the Host) still refuses evolved events, so deliver evolved events as gap-fill. Stage 4.24.1 also lists the ESM v6 members (reactions, captures, application triggers, clock and capture specifications) as rejected `STAGE-ESM-024` in its surface ledger, but the version gate refuses the model first, so a v6 model reports `STAGE-ESM-016` only. The bundled Stage 4.24.2 (cratis 3.28.3) reports an evolved event with `STAGE-ESM-026` only (probed); cratis 3.28.2 bundled Stage 4.24.1 (3.28.1 and earlier: 4.24.0), refused a v4 model with `STAGE-ESM-016` and also reported `CLI-RENDER-003`. The admitted vertical:
|
|
234
|
+
|
|
235
|
+
- concepts, composite types, collections and optional values;
|
|
236
|
+
- `StateChange` slices with exactly one command and an unconditional `produces` whose
|
|
237
|
+
`for` is the command identifier, with portable validation;
|
|
238
|
+
- `StateView` slices with exactly one projection (or reducer) per read model: a flat
|
|
239
|
+
`from` block, or a scoped projection (several `from`, `remove with`, root `join`,
|
|
240
|
+
one-level `children`, `nested`), keyed by the event source or an event property; and
|
|
241
|
+
any number of optional snapshot queries by the read-model identifier;
|
|
242
|
+
- declarative authorization (including query authorization) that requires authentication;
|
|
243
|
+
- unique constraints, and modeled specifications that fit the shapes in the reference;
|
|
244
|
+
- reducers whose bodies pass the **pure** allowlist (Roslyn analysis).
|
|
245
|
+
|
|
246
|
+
Not rendered: `Automation` and `Translate` slices (Stage#79, open: the whole automation
|
|
247
|
+
is gap-fill), reactions and captures, list, observable, filtered and scoped queries,
|
|
248
|
+
`produces when`, command `handler`s, code validation and opaque policies (they refuse),
|
|
249
|
+
composite-key projections, `all`, and compliance attributes (`@pii`, `@sensitive`, which
|
|
250
|
+
already fail binding with `PLAY0268`). Any one blocking diagnostic fails the whole plan.
|
|
251
|
+
A refusal is not a licence to weaken the model: drop no specification, event generation
|
|
252
|
+
or protection to get a render; keep the model, record the capability gap and gap-fill.
|
|
253
|
+
The code table, the projection and specification rules and the refusals reproduced while
|
|
254
|
+
building the example are in the sections above; the exhaustive ledger
|
|
255
|
+
is `references/renderable-subset.md` in `cratis-screenplay-toolchain`.
|
|
256
|
+
Read `cratis-screenplay-toolchain/references/renderable-subset.md` when you need the exhaustive surface ledger beyond the admission summary.
|
|
257
|
+
|
|
258
|
+
(At 4.24 descriptions and documentation were not rendered at all; since Stage#178 they render as XML doc comments only. Prose is still never enforced behavior.)
|
package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/render-example.md
CHANGED
|
@@ -98,7 +98,7 @@ module Berths
|
|
|
98
98
|
Why it is shaped this way:
|
|
99
99
|
|
|
100
100
|
- Each command has one unconditional `produces`, with a typed `for` on the identifier.
|
|
101
|
-
- The policy requires authentication as well as the role
|
|
101
|
+
- The policy requires authentication as well as the role. (On cratis 3.27.1 a role alone was refused with `STAGE-ESM-015`; Stage 4.73.1 renders a role-only policy, reading roles through the identity's `RoleClaimType`. The authenticated form still renders.)
|
|
102
102
|
- The projection has a `from` and a `remove with`, so Stage renders it as a scoped
|
|
103
103
|
projection keyed by the event source. The identifier is never mapped: the key
|
|
104
104
|
establishes it, and mapping it is `STAGE-ESM-017`.
|
|
@@ -110,6 +110,8 @@ Why it is shaped this way:
|
|
|
110
110
|
|
|
111
111
|
## What was run
|
|
112
112
|
|
|
113
|
+
**Re-probed on cratis 3.53.1 (Stage 4.73.1; admission and publication only, build and tests not re-run):** the model compiles with the standalone 4.139.0 tool, its 3 specifications pass in the reference runner, and `cratis render` exits 0 with 56 artifacts written to a scratch destination (the plan grew with the scaffold). The counts and results in the table below are the cratis 3.28.2 observations.
|
|
114
|
+
|
|
113
115
|
All with cratis 3.28.2 (re-run end to end from 3.27.1: same counts; admission and publication re-run on 3.28.3 with Stage 4.24.2: the same 30 artifacts) on a folder holding only `berths.play`:
|
|
114
116
|
|
|
115
117
|
| Step | Command | Result |
|
package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md
CHANGED
|
@@ -1,25 +1,36 @@
|
|
|
1
1
|
# The rendered application: scaffold, managed files and `Customizations/`
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- Scaffold pins
|
|
6
|
+
- What is managed
|
|
7
|
+
- `Customizations/` (unmanaged)
|
|
8
|
+
- Re-render checklist
|
|
9
|
+
|
|
10
|
+
Read at Stage `v4.24.0`, with the scaffold pins re-read at `v4.73.1` (`Scaffolding/CratisBackendApplicationScaffold*.cs`,
|
|
4
11
|
`CratisFrontendApplicationScaffold.cs`, `README.md`,
|
|
5
12
|
`Documentation/guides/customize-rendered-application.md`) and checked against a real
|
|
6
13
|
render (see [render-example.md](render-example.md)).
|
|
7
14
|
|
|
8
15
|
## Scaffold pins
|
|
9
16
|
|
|
10
|
-
The pin rows below are source-checked at Stage `v4.
|
|
11
|
-
`Source/Rendering.Cratis/Scaffolding/CratisBackendApplicationScaffoldProfile.cs
|
|
12
|
-
`CratisBackendApplicationScaffold.cs` and `CratisFrontendPackageSet.cs
|
|
13
|
-
|
|
17
|
+
The pin rows below are source-checked at Stage `v4.73.1` (the Stage in CLI 3.53.1),
|
|
18
|
+
`Source/Rendering.Cratis/Scaffolding/CratisBackendApplicationScaffoldProfile.cs` (`Current`),
|
|
19
|
+
`CratisBackendApplicationScaffold.cs` and `CratisFrontendPackageSet.cs` (`Current`; read the
|
|
20
|
+
`Current` argument list, because the class summary still quotes older Scene and Components
|
|
21
|
+
versions). The scaffold pins an exact release per package and lags the latest releases by design
|
|
22
|
+
(Arc 22.72.0 and Chronicle 19.50.0 were current when this was checked); moving them is a Stage
|
|
23
|
+
change, so a re-render under a newer Stage is how they change. Earlier runtime/customization
|
|
24
|
+
probes above keep their original labels.
|
|
14
25
|
|
|
15
26
|
| Item | Value |
|
|
16
27
|
| --- | --- |
|
|
17
28
|
| Target framework | .NET 10 (`net10.0`), `Microsoft.NET.Sdk.Web` |
|
|
18
|
-
| Arc packages (`Cratis`, `Cratis.Arc.MongoDB`, Arc
|
|
19
|
-
| Chronicle client | `Cratis.Chronicle`, `.AspNetCore` and `.Testing` `19.
|
|
29
|
+
| Arc packages (`Cratis`, `Cratis.Arc.MongoDB`, `Cratis.Arc.Chronicle.Testing`) | `22.68.0` (below Arc 22.70, so reverse-generator compliance diagnostics and the like are not in the scaffold; reactors returning events and commands need Arc 22.72.0 or later, so a hand-written mixed reactor in a rendered app needs a proven dependency override; Arc 22.68.0's handler accepts a collection only when every element is a command) |
|
|
30
|
+
| Chronicle client | `Cratis.Chronicle`, `.AspNetCore` and `.Testing` `19.45.0`, matched to the `cratis/chronicle:19.45.0-development` image in the compose file |
|
|
20
31
|
| Embedded reverse extraction | `CratisEmbeddedScreenplayEnabled=false`: the source `.play` is authoritative |
|
|
21
|
-
| Test packages |
|
|
22
|
-
| Frontend | Vite and React
|
|
32
|
+
| Test packages | `Cratis.Specifications` and `.XUnit` 4.1.1, Microsoft.NET.Test.Sdk 18.10.1, NSubstitute 6.2.0, xunit 2.9.3, xunit runner 4.0.0; **Debug configuration only** (`IsTestProject` when Debug) |
|
|
33
|
+
| Frontend | Vite 8.3.0 and React 19.3.0; `@cratis/arc`, `arc.react`, `arc.vite` 22.58.2; `@cratis/components` 4.26.2; `@cratis/scene` 4.21.0; `@cratis/fundamentals` 7.22.8 |
|
|
23
34
|
| Package management | central package management **off**; `Directory.Packages.props` is managed, do not edit it |
|
|
24
35
|
|
|
25
36
|
Consequences: `[ProtectedDecision]` (`Cratis.Arc.Chronicle.ReadModels`) and
|
|
@@ -27,10 +38,13 @@ Consequences: `[ProtectedDecision]` (`Cratis.Arc.Chronicle.ReadModels`) and
|
|
|
27
38
|
in this scaffold's package set, as is `[ExecuteCommandsAsSystem]`. This is API
|
|
28
39
|
availability, not Stage emission or runtime protection: gap-fill must opt into
|
|
29
40
|
the protected command profile and enroll an admitted projection/key read in the
|
|
30
|
-
active unit of work. Source-checked at Arc v22.
|
|
31
|
-
and `CommandDecisionReads.cs`, Chronicle v19.
|
|
41
|
+
active unit of work. Source-checked at Arc v22.72.0 `ProtectedDecisionAttribute.cs`
|
|
42
|
+
and `CommandDecisionReads.cs`, Chronicle v19.50.0 `DecisionRead.cs`/`IDecisionReads.cs`.
|
|
32
43
|
Stage does not turn `.play` `reads`/`require` into protected decisions. Upgrading Arc or Chronicle inside a rendered application is a re-render under a newer
|
|
33
|
-
Stage, not an edit of the managed files.
|
|
44
|
+
Stage, not an edit of the managed files. Hand-written scope that needs a newer Arc (for example a
|
|
45
|
+
reactor returning events and commands) can raise the version through `Customizations/Dependencies.props`
|
|
46
|
+
(explicit `Version`, imported last; central management is off), but whether that override restores
|
|
47
|
+
cleanly beside the managed 22.68.0 reference is **unverified**: prove it with a restore and build. The compose file binds local ports `27017` and
|
|
34
48
|
`35000`, keeps data in the named volumes `chronicle-data` and `chronicle-config`, and
|
|
35
49
|
`docker compose down --volumes` is the only thing that deletes them.
|
|
36
50
|
|
|
@@ -45,9 +59,10 @@ refused on the next render. The application identity from `--name` becomes the
|
|
|
45
59
|
Chronicle event-store name in `appsettings.json` and the default project name and root
|
|
46
60
|
namespace.
|
|
47
61
|
|
|
48
|
-
Whether modeled `screen` declarations become faithful screens
|
|
49
|
-
|
|
50
|
-
|
|
62
|
+
Whether modeled `screen` declarations become faithful screens is a runtime question, not a
|
|
63
|
+
publication result: the Stage 4.73.1 scaffold emits Arc `CommandForm` shells over Scene typed
|
|
64
|
+
bindings and navigation contributions, but claim UI fidelity only from a browser run
|
|
65
|
+
(`SKILL.md`, UI parity). Screens stay managed.
|
|
51
66
|
|
|
52
67
|
## `Customizations/` (unmanaged)
|
|
53
68
|
|
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
# The `cratis/stage` sandbox and the `cratis/stage-specrunner` job
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## Contents
|
|
4
|
+
|
|
5
|
+
- Current behavior at Stage 4.73.1 (source reading; Docker not run)
|
|
6
|
+
- The sandbox: a partial, disposable runtime
|
|
7
|
+
- The specification runner
|
|
8
|
+
- Choosing between them
|
|
9
|
+
|
|
10
|
+
Read at Stage `v4.24.0`, then re-read for the current paragraph below at `v4.73.1` (`README.md`, `Documentation/docker/index.md`,
|
|
4
11
|
`Documentation/docker/spec-runner.md`, `Documentation/reference/urls.md`) and cli
|
|
5
12
|
`v3.28.2` (`Commands/Run/*`, unchanged since `v3.27.1`). Docker was **not run** for this skill: every behaviour here
|
|
6
13
|
is documented behaviour, not an observed result. Both images are still shipped.
|
|
7
14
|
|
|
15
|
+
## Current behavior at Stage 4.73.1 (source reading; Docker not run)
|
|
16
|
+
|
|
17
|
+
Read from `Documentation/docker/index.md` and `docker/spec-runner.md` at `v4.73.1` and the CLI
|
|
18
|
+
3.53.1 reference. The default EventModel engine refuses named event sources, streams and routes
|
|
19
|
+
with `STAGE-ESM-030` (`/stage/status` reports `state: "unsupported"` and `/api/**` answers 501),
|
|
20
|
+
so `cratis run` does not run a routed model: render it with `cratis render`. Both engines refuse
|
|
21
|
+
public events (`-032`), foreign or source-event captures (`-033`) and reaction identity, filters
|
|
22
|
+
and overrides (`-034` to `-036`); reactions are refused (`-024`, `-037`). The semantic engine admits
|
|
23
|
+
ESM v1 to v10 version pairs and executes routes. The structural specification runner is deprecated:
|
|
24
|
+
it prints a deprecation notice, refuses routes with exit 1 and writes no results file. Exit codes
|
|
25
|
+
`0`/`1`/`2` are as in `SKILL.md`. The sections below describe the 4.24-era behavior and remain the
|
|
26
|
+
engine comparison.
|
|
27
|
+
|
|
8
28
|
## The sandbox: a partial, disposable runtime
|
|
9
29
|
|
|
10
30
|
`cratis/stage` is the Stage host plus an in-memory Chronicle kernel. Each session starts
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
{ "kind": "skill-contains", "value": "means stop and reconcile" },
|
|
14
14
|
{ "kind": "skill-contains", "value": "STAGE-ESM-016" },
|
|
15
15
|
{ "kind": "skill-contains", "value": "**Render never builds, tests or runs**" },
|
|
16
|
-
{ "kind": "skill-contains", "value": "Arc
|
|
16
|
+
{ "kind": "skill-contains", "value": "scaffold pins Arc, Chronicle, Components, Scene and" },
|
|
17
17
|
{ "kind": "skill-contains", "value": "`[ProtectedDecision]`" },
|
|
18
18
|
{ "kind": "skill-contains", "value": "`Customizations/`" },
|
|
19
19
|
{ "kind": "skill-contains", "value": "`Stage__Runtime__Engine=semantic`" },
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
{ "kind": "skill-contains", "value": "STAGE-ESM-024" },
|
|
24
24
|
{ "kind": "skill-contains", "value": "`v4.24.2`" },
|
|
25
25
|
{ "kind": "skill-contains", "value": "STAGE-ESM-026" },
|
|
26
|
-
{ "kind": "skill-contains", "value": "Stage 4.24.2 admits ESM v4" },
|
|
26
|
+
{ "kind": "skill-contains", "value": "Stage 4.24.2 admits ESM v4", "file": "references/admission.md" },
|
|
27
27
|
{ "kind": "skill-contains", "value": "`v4.24.2`" },
|
|
28
28
|
{ "kind": "skill-contains", "value": "Cratis/cli#253" },
|
|
29
29
|
{ "kind": "skill-contains", "value": "Silent fallback to a default screen is a failure" },
|
|
@@ -32,6 +32,11 @@
|
|
|
32
32
|
{ "kind": "skill-contains", "value": "references/case-tables-and-whole-numbers.md" },
|
|
33
33
|
{ "kind": "skill-contains", "value": "STAGE-CRATIS-004" },
|
|
34
34
|
{ "kind": "skill-contains", "value": "STAGE-ESM-031" },
|
|
35
|
-
{ "kind": "skill-contains", "value": "Stage 4.52.0 renderer applies neither new rule" }
|
|
35
|
+
{ "kind": "skill-contains", "value": "Stage 4.52.0 renderer applies neither new rule" },
|
|
36
|
+
{ "kind": "skill-contains", "value": "STAGE-ESM-037" },
|
|
37
|
+
{ "kind": "skill-contains", "value": "`--scope <ADDRESS>`" },
|
|
38
|
+
{ "kind": "skill-contains", "value": "`--check`" },
|
|
39
|
+
{ "kind": "skill-contains", "value": "XML documentation comments" },
|
|
40
|
+
{ "kind": "skill-contains", "value": "Do not split the modeled reaction", "file": "references/admission.md" }
|
|
36
41
|
]
|
|
37
42
|
}
|
|
@@ -818,6 +818,7 @@
|
|
|
818
818
|
"cratis-screenplay-automations-and-translations",
|
|
819
819
|
"cratis-screenplay-captures-and-reactions",
|
|
820
820
|
"cratis-screenplay-command-surface",
|
|
821
|
+
"cratis-screenplay-delivery-planning",
|
|
821
822
|
"cratis-screenplay-discovery",
|
|
822
823
|
"cratis-screenplay-event-modeling",
|
|
823
824
|
"cratis-screenplay-legacy-extraction",
|