@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.
Files changed (176) hide show
  1. package/package/corpus/agents/screenplay-modeler.md +1 -1
  2. package/package/corpus/agents/screenplay-renderer.md +1 -1
  3. package/package/corpus/agents/screenplay-reviewer.md +1 -1
  4. package/package/corpus/agents/slice-implementer.md +1 -1
  5. package/package/corpus/rules/profiles.md +1 -0
  6. package/package/corpus/skills/cratis-application-slice-conformance/LICENSE +2 -2
  7. package/package/corpus/skills/cratis-application-slice-conformance/SKILL.md +5 -0
  8. package/package/corpus/skills/cratis-application-slice-conformance/references/checklists.md +12 -0
  9. package/package/corpus/skills/cratis-application-slice-conformance/references/provenance.md +3 -4
  10. package/package/corpus/skills/cratis-application-slice-specifications/LICENSE +2 -2
  11. package/package/corpus/skills/cratis-application-slice-specifications/references/provenance.md +2 -3
  12. package/package/corpus/skills/cratis-arc-react-page/LICENSE +2 -2
  13. package/package/corpus/skills/cratis-arc-react-page/references/provenance.md +2 -3
  14. package/package/corpus/skills/cratis-chronicle-event-modeling/SKILL.md +12 -6
  15. package/package/corpus/skills/cratis-chronicle-reactor/LICENSE +2 -2
  16. package/package/corpus/skills/cratis-chronicle-reactor/SKILL.md +5 -2
  17. package/package/corpus/skills/cratis-chronicle-reactor/references/provenance.md +3 -3
  18. package/package/corpus/skills/cratis-chronicle-reactor/references/slice-delivery-checklist.md +93 -0
  19. package/package/corpus/skills/cratis-chronicle-read-model-specifications/LICENSE +2 -2
  20. package/package/corpus/skills/cratis-chronicle-read-model-specifications/SKILL.md +1 -1
  21. package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/provenance.md +3 -3
  22. package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/view-lifecycle-checks.md +79 -0
  23. package/package/corpus/skills/cratis-event-model-diagram/LICENSE +7 -0
  24. package/package/corpus/skills/cratis-event-model-diagram/SKILL.md +26 -2
  25. package/package/corpus/skills/cratis-event-model-diagram/references/provenance.md +19 -0
  26. package/package/corpus/skills/cratis-screenplay-automations-and-translations/LICENSE +2 -2
  27. package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +16 -11
  28. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +1 -1
  29. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +7 -7
  30. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +1 -1
  31. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/provenance.md +5 -6
  32. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/public-events-and-direction.md +2 -3
  33. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +9 -5
  34. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +6 -6
  35. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translate-example.md +1 -1
  36. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +16 -15
  37. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/invocation-identity.md +2 -2
  38. package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +20 -19
  39. package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +3 -1
  40. package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +1 -1
  41. package/package/corpus/skills/cratis-screenplay-command-surface/references/enum-numbers.md +93 -0
  42. package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +5 -6
  43. package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +4 -2
  44. package/package/corpus/skills/cratis-screenplay-delivery-planning/LICENSE +9 -0
  45. package/package/corpus/skills/cratis-screenplay-delivery-planning/SKILL.md +118 -0
  46. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/parallel-delivery.md +45 -0
  47. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/provenance.md +29 -0
  48. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/slice-counting.md +43 -0
  49. package/package/corpus/skills/cratis-screenplay-delivery-planning/references/velocity-and-capacity.md +48 -0
  50. package/package/corpus/skills/cratis-screenplay-delivery-planning/verification.json +16 -0
  51. package/package/corpus/skills/cratis-screenplay-discovery/LICENSE +2 -2
  52. package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +6 -5
  53. package/package/corpus/skills/cratis-screenplay-discovery/references/divergent-sweep.md +1 -0
  54. package/package/corpus/skills/cratis-screenplay-discovery/references/domain-analysis-template.md +92 -0
  55. package/package/corpus/skills/cratis-screenplay-discovery/references/personas-and-causes.md +2 -2
  56. package/package/corpus/skills/cratis-screenplay-discovery/references/provenance.md +4 -3
  57. package/package/corpus/skills/cratis-screenplay-discovery/verification.json +1 -1
  58. package/package/corpus/skills/cratis-screenplay-event-modeling/LICENSE +2 -2
  59. package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +30 -29
  60. package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +7 -5
  61. package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +13 -10
  62. package/package/corpus/skills/cratis-screenplay-event-modeling/references/provenance.md +2 -3
  63. package/package/corpus/skills/cratis-screenplay-legacy-extraction/LICENSE +2 -2
  64. package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +26 -13
  65. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/candidate-inventory.md +6 -1
  66. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +7 -0
  67. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/prologue-safety.md +22 -17
  68. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/provenance.md +2 -3
  69. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md +2 -2
  70. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/side-car-migration.md +1 -0
  71. package/package/corpus/skills/cratis-screenplay-legacy-extraction/verification.json +1 -1
  72. package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +25 -25
  73. package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +8 -2
  74. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +8 -3
  75. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +38 -8
  76. package/package/corpus/skills/cratis-screenplay-model-authoring/references/property-links.md +126 -0
  77. package/package/corpus/skills/cratis-screenplay-model-authoring/references/screen-authoring-workflow.md +3 -4
  78. package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +1 -1
  79. package/package/corpus/skills/cratis-screenplay-model-review/LICENSE +2 -2
  80. package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +8 -8
  81. package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +2 -2
  82. package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +4 -4
  83. package/package/corpus/skills/cratis-screenplay-model-review/references/model-inventory-report.md +75 -0
  84. package/package/corpus/skills/cratis-screenplay-model-review/references/provenance.md +3 -4
  85. package/package/corpus/skills/cratis-screenplay-model-review/references/public-keys-and-routes.md +1 -1
  86. package/package/corpus/skills/cratis-screenplay-model-review/references/worked-example.md +4 -3
  87. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/LICENSE +2 -2
  88. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +7 -5
  89. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/core-rules-digest.md +131 -0
  90. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/phases.md +1 -1
  91. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/provenance.md +25 -4
  92. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/reasoning-notes.md +2 -2
  93. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/verdicts-and-modes.md +1 -1
  94. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +5 -4
  95. package/package/corpus/skills/cratis-screenplay-projections/SKILL.md +9 -5
  96. package/package/corpus/skills/cratis-screenplay-projections/references/pdl-grammar.md +4 -2
  97. package/package/corpus/skills/cratis-screenplay-read-surface/LICENSE +7 -0
  98. package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +16 -8
  99. package/package/corpus/skills/cratis-screenplay-read-surface/references/provenance.md +21 -0
  100. package/package/corpus/skills/cratis-screenplay-read-surface/references/screen-patterns.md +130 -0
  101. package/package/corpus/skills/cratis-screenplay-read-surface/verification.json +1 -1
  102. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/LICENSE +2 -2
  103. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +60 -47
  104. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/delivery-protocol.md +17 -2
  105. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/drift-and-ledger.md +19 -2
  106. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +24 -6
  107. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/provenance.md +2 -3
  108. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +21 -16
  109. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/worked-example.md +34 -29
  110. package/package/corpus/skills/cratis-screenplay-scenario-coverage/LICENSE +2 -2
  111. package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +5 -4
  112. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +1 -1
  113. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +5 -4
  114. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-example.md +32 -3
  115. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/provenance.md +3 -4
  116. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-catalogue.md +7 -6
  117. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md +3 -3
  118. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-workshop.md +15 -7
  119. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +11 -10
  120. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/view-and-story-specs.md +6 -4
  121. package/package/corpus/skills/cratis-screenplay-slice-design/LICENSE +2 -2
  122. package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +4 -3
  123. package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +2 -2
  124. package/package/corpus/skills/cratis-screenplay-slice-design/references/derived-condition-events.md +68 -0
  125. package/package/corpus/skills/cratis-screenplay-slice-design/references/field-lineage.md +1 -1
  126. package/package/corpus/skills/cratis-screenplay-slice-design/references/provenance.md +5 -5
  127. package/package/corpus/skills/cratis-screenplay-slice-design/references/read-model-design.md +17 -0
  128. package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +6 -6
  129. package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +3 -3
  130. package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +7 -5
  131. package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +4 -3
  132. package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md +3 -2
  133. package/package/corpus/skills/cratis-screenplay-specifications/references/persona-callers-and-cases.md +3 -0
  134. package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +3 -2
  135. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/LICENSE +2 -2
  136. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +14 -11
  137. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +31 -3
  138. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/chronicle-boundaries.md +6 -6
  139. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +12 -11
  140. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/evolution.md +18 -1
  141. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/provenance.md +4 -4
  142. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +1 -1
  143. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +1 -1
  144. package/package/corpus/skills/cratis-screenplay-toolchain/LICENSE +2 -2
  145. package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +29 -18
  146. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +3 -3
  147. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +7 -4
  148. package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +21 -2
  149. package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +5 -3
  150. package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +32 -18
  151. package/package/corpus/skills/cratis-screenplay-toolchain/references/production-routes-and-filters.md +1 -1
  152. package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +3 -4
  153. package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +46 -16
  154. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract-exceptions.json +1 -1
  155. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +1092 -17
  156. package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
  157. package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +1 -1
  158. package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +8 -8
  159. package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +18 -13
  160. package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +41 -20
  161. package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +7 -2
  162. package/package/corpus/skills/cratis-screenplay-ui-composition/LICENSE +2 -2
  163. package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +10 -10
  164. package/package/corpus/skills/cratis-screenplay-ui-composition/references/flow-review.md +1 -1
  165. package/package/corpus/skills/cratis-screenplay-ui-composition/references/provenance.md +2 -3
  166. package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +41 -16
  167. package/package/corpus/skills/cratis-screenplay-ui-composition/references/worked-flow.md +17 -9
  168. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +85 -77
  169. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +65 -16
  170. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/case-tables-and-whole-numbers.md +2 -2
  171. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/render-example.md +3 -1
  172. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +30 -15
  173. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +21 -1
  174. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +9 -4
  175. package/package/profile-catalog.json +1 -0
  176. 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 4.67 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 4.12 typed bindings, Debug specifications), managed publication, `--force` and recovery, 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`)."
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,29 +40,27 @@ argument or an invalid semantic option.
40
40
 
41
41
  ## Verified product sources
42
42
 
43
- | Source | Pin | Notes |
44
- | --- | --- | --- |
45
- | Stage | `4.67.0` as CLI 3.50.0's renderer and default sandbox image | Source-checked, not a new executed vector. Case tables (4.59.0+) and whole numbers as `long` from ESM v8 (4.61.0+) apply to this default. Previous CLI 3.46.1 used Stage 4.52.0 (`0e4fd87`) and applied neither. Stage 4.52.0 defines `STAGE-SCENE-ACTION-001`/`STAGE-SCENE-INTERACTION-001` and was executed on CLI 3.43.0. Earlier executed baselines: 4.51.3, 4.51.1, 4.49.5 and `v4.24.2` (`32dcac4`) |
46
- | cratis CLI | `3.50.0` (`546dea12`) | `v3.50.0:Directory.Packages.props` pins Stage 4.67.0, Screenplay 4.131.0, Arc.Screenplay 22.54.0, Chronicle 19.32.0, Fundamentals 7.22.8. `cratis run --tag` changes only the sandbox image. Executed render/browser/MCP baseline remains 3.43.0 (Stage 4.52.0, Screenplay 4.127.0), not a 3.50.0 probe; UI-profile refusal and rendered recovery shipped in Cratis/cli#301. Older baselines: 3.41.0, 3.40.7, `v3.28.2` (`141c499`, Cratis/cli#253) |
47
- | Screenplay | bundled `4.131.0`; standalone pin `4.135.0` | Name the compiler: bundled 4.131.0 lacks v11 literal lowering; `semantic-diff` source objects are in both current tools |
48
- | Rendered applications | Arc, Chronicle, Scene 4.15.0, .NET 10 | CLI 3.43.0 renders the canonical corpus to `.cratis-render.json`, backend artifacts, `.frontend/**`, `scene.json`, `src/bindings.ts`. Verify the generated package set for each render before claiming exact Scene runtime parity |
49
-
50
- The retained admission and runtime evidence below was read at its named tags (`Source/Rendering.Cratis/**`, `README.md`,
51
- `Documentation/**` in Stage; `Source/Cli/Commands/Render/**` and
52
- `Documentation/reference/screenplay.md` in the CLI), and the vertical in
53
- [references/render-example.md](references/render-example.md) was rendered, built and
54
- tested with cratis 3.28.2 (re-run on 3.28.3). Read `references/render-example.md` when you need a complete renderable model and the observed render, build, and test results. The full version table (Screenplay 4.66.0, Arc 22.50.5,
55
- Chronicle 19.32.0 and the tool split) is in the `cratis-screenplay-toolchain` skill,
56
- `references/versions.md`. Stage 4.51.3 scaffolds Arc `22.50.5` and Chronicle
57
- `19.32.0`, with `CratisEmbeddedScreenplayEnabled=false`. `[ProtectedDecision]` and
58
- `DecisionRead<T>` are available to gap-fill code, not automatically emitted or
59
- protected by Stage; admission and unit-of-work enrollment still matter. See
60
- [rendered application](references/rendered-application.md) for the source checks. Screen render
61
- publication and browser behavior for the canonical corpus are verified on public
62
- CLI 3.43.0 / `cratis/stage:4.52.0`. Studio 0.144.4 is released, but production
63
- answers every unauthenticated request with 401 and the production UI automation
64
- needs a
65
- 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 Screenplay 4.137.0 and Stage 4.73.1, so its
48
+ binder is behind the standalone 4.139.0 compiler. Stage 4.73.1's scaffold pins Arc 22.68.0, Chronicle 19.45.0, Components 4.26.2, Scene 4.21.0 and
49
+ Fundamentals 7.22.8. 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.
66
64
 
67
65
  ## Model-first rule
68
66
 
@@ -92,8 +90,9 @@ backups). Never stage `.cratis-render/` in git; commit the manifest with the out
92
90
  - An unchanged re-render writes nothing (`unchanged` equals the artifact count).
93
91
  - Use exclusive access to the destination; a receipt is a filesystem result, not a Git
94
92
  commit, and the command creates no branch, commit or PR.
95
- - Drift: compare successive manifests' `semanticRevision` for renders with the same
96
- `--name` and inputs. Do not compare the MCP `modelRevision` with the manifest: their
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
97
96
  application identities can differ.
98
97
 
99
98
  ## Rendering with `cratis render`
@@ -111,8 +110,22 @@ cratis render --workspace ./application.workspace.json --destination ./out
111
110
  | `--destination <DIR>` | Publication directory, default `./out`. It never defines identity |
112
111
  | `--target` | Only `cratis` is bundled |
113
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 |
114
116
  | `--force` | See "Publication and recovery" |
115
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
+
116
129
  Order of events: recover any interrupted earlier publication, compile, bind, build the
117
130
  execution plan, plan the target (Stage admission), validate artifacts, then publish.
118
131
  Exit `0` is a published render, `5` is a refusal with nothing published (diagnostics are
@@ -121,13 +134,10 @@ receipt.
121
134
 
122
135
  Facts that surprise:
123
136
 
124
- - **Binding uses the CLI's bundled Screenplay** (4.66.0 in cratis 3.28.2, the same compiler
125
- as the standalone tool, ESM up to v6). A v6 model (Automation, Translate, reactions,
126
- captures, application triggers, clock specifications) binds and is then refused whole by
127
- Stage with `STAGE-ESM-016` (probed on 3.28.2); on cratis before 3.28.2 the bundled
128
- 4.60.1 binder stopped it first with `PLAY0268`. A model that binds is not necessarily
129
- renderable: Stage admits ESM v1 to v4, and a v4 model renders only while no selected
130
- event has evolved (`STAGE-ESM-026`, Stage 4.24.2).
137
+ - **Binding uses the CLI's bundled Screenplay** (4.137.0 in cratis 3.53.1; 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`.
131
141
  - **Render never builds, tests or runs** the output. A published render is admission and
132
142
  publication only; build and tests are separate results (see "Verify"). Admission can be
133
143
  green while a rendered Debug test fails (the example hit this with a query assertion).
@@ -138,48 +148,43 @@ Facts that surprise:
138
148
  - `cratis render` and `cratis screenplay validate` are different gates: a model can
139
149
  validate and still refuse here.
140
150
 
141
- ## Historical Stage 4.24 admission
142
-
143
- CLI 3.50.0/Stage 4.67.0 reaches construct checks through v10; v11 gets
144
- CLI-RENDER-004 (direct Stage: STAGE-ESM-016). Public/foreign events, reaction
145
- identity/filters and production overrides still refuse. Reducer filters render.
146
- Read [admission](references/admission.md) for STAGE-ESM-032–036 and previous
147
- CLI/version boundaries. Source acceptance is not V5; keep contracts for gap-fill.
148
-
149
- The following detailed 4.24.x probes are historical, not current pin claims.
150
-
151
- 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:
152
-
153
- - concepts, composite types, collections and optional values;
154
- - `StateChange` slices with exactly one command and an unconditional `produces` whose
155
- `for` is the command identifier, with portable validation;
156
- - `StateView` slices with exactly one projection (or reducer) per read model: a flat
157
- `from` block, or a scoped projection (several `from`, `remove with`, root `join`,
158
- one-level `children`, `nested`), keyed by the event source or an event property; and
159
- any number of optional snapshot queries by the read-model identifier;
160
- - declarative authorization (including query authorization) that requires authentication;
161
- - unique constraints, and modeled specifications that fit the shapes in the reference;
162
- - reducers whose bodies pass the **pure** allowlist (Roslyn analysis).
163
-
164
- Not rendered: `Automation` and `Translate` slices (Stage#79, open: the whole automation
165
- is gap-fill), reactions and captures, list, observable, filtered and scoped queries,
166
- `produces when`, command `handler`s, code validation and opaque policies (they refuse),
167
- composite-key projections, `all`, and compliance attributes (`@pii`, `@sensitive`, which
168
- already fail binding with `PLAY0268`). Any one blocking diagnostic fails the whole plan.
169
- A refusal is not a licence to weaken the model: drop no specification, event generation
170
- or protection to get a render; keep the model, record the capability gap and gap-fill.
171
- The code table, the projection and specification rules and three refusals reproduced while
172
- building the example are in [references/admission.md](references/admission.md); the exhaustive ledger
173
- is `references/renderable-subset.md` in `cratis-screenplay-toolchain`.
174
- Read `cratis-screenplay-toolchain/references/renderable-subset.md` when you need the exhaustive surface ledger beyond the admission summary.
175
-
176
- Descriptions and documentation are never rendered, so a rule that exists only in prose
177
- 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`.
178
183
 
179
184
  ## What it emits
180
185
 
181
186
  At application scope the plan holds the scaffold plus the modeled artifacts, for the
182
- 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`,
183
188
  `docker-compose.yml`, the Directory props files, a policy registration and generated
184
189
  policies, `Common/<Concept>.cs`, one `<Module>/<Feature>/<Slice>/` folder per slice with
185
190
  the `[Command]` record and `Handle()`, the `[EventType]` event, the validator and the
@@ -198,14 +203,14 @@ Stage 4.59.0+ expands a case table to effective `<Specification>_<Case>` names
198
203
  and one generated class per case; normalized path collisions refuse the plan
199
204
  with `STAGE-CRATIS-004`. Failed case results include the case and effective fixtures.
200
205
  Stage 4.61.0+ renders whole numbers as `long` from ESM v8, retains `int` below
201
- v8 and refuses out-of-`int` literals there with `STAGE-ESM-031`. CLI 3.50.0's
202
- Stage 4.67.0 default applies both rules. Previous CLI 3.46.1's
206
+ v8 and refuses out-of-`int` literals there with `STAGE-ESM-031`. The pinned Stage default applies both rules;
207
+ pins: toolchain `references/versions.md`. Previous CLI 3.46.1's
203
208
  Stage 4.52.0 renderer applies neither new rule. Read
204
209
  [case tables and whole numbers](references/case-tables-and-whole-numbers.md)
205
210
  for complete examples, stored-schema consequences and the sandbox-only `--tag` override.
206
211
 
207
212
  For UI, record what the generated output claims separately from what the model
208
- authored. On Stage 4.24 the generated scaffold is not screen parity evidence.
213
+ authored. Before CLI 3.40.7 the generated scaffold was not screen parity evidence.
209
214
  On public CLI 3.43.0 / `cratis/stage:4.52.0` the canonical corpus publishes,
210
215
  `scene.json` contains Arc `commandForm` components, `src/bindings.ts` registers
211
216
  the modeled commands and queries, and the browser acceptance run passes. That is
@@ -221,7 +226,9 @@ API on `9090`, Chronicle Workbench on `https://localhost:35000`. It is a **parti
221
226
  disposable runtime**, not a generated application. The default engine appends modeled
222
227
  `produces` facts and echoes the payload but enforces no modeled validation or
223
228
  authorization and no query authorization; `Stage__Runtime__Engine=semantic` opts in to
224
- an engine that does, and refuses what it cannot execute (HTTP 501). Callers are built
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
225
232
  from unsigned headers, so authorization there is not a security boundary.
226
233
 
227
234
  `cratis/stage-specrunner` checks modeled specifications and writes a results file. The
@@ -234,7 +241,8 @@ Read `references/sandbox-and-specrunner.md` before launching either container or
234
241
  ## Verify
235
242
 
236
243
  - `cratis render` exits 0 and reports `recovered: false`, with `written + unchanged`
237
- equal to the artifact count; otherwise the render is not a result.
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.
238
246
  - Report V5 as separate results, each a result or "not run": admission, publication,
239
247
  Debug build (`dotnet build <destination>/<Project>.csproj -c Debug`), Debug tests
240
248
  (`dotnet test` on the same project) and runtime. Render alone is the first two.
@@ -1,4 +1,4 @@
1
- # Historical Stage 4.24 admission: codes, specification rules and observed refusals
1
+ # Stage admission: codes, specification rules and observed refusals
2
2
 
3
3
  ## Contents
4
4
 
@@ -8,12 +8,17 @@
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 are in `cratis-screenplay-toolchain` `references/versions.md`:
13
- Standalone Screenplay is 4.135.0; CLI 3.50.0 bundles Stage 4.67.0 / Screenplay
14
- 4.131.0 / Arc.Screenplay 22.54.0 / Chronicle 19.32.0 / Fundamentals 7.22.8.
15
- It admits through ESM v10 to construct planning; above v10 is CLI-RENDER-004.
16
- Stage 4.67.0 `SemanticVersionFeatures`/`SemanticVersionFeatureAdmission` refuse
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.
19
+ The pinned CLI admits through ESM v10 to construct planning; a bound newer model
20
+ gets CLI-RENDER-004. Binding with the bundled compiler is a separate prerequisite.
21
+ The pinned Stage's `SemanticVersionFeatures`/`SemanticVersionFeatureAdmission` refuse
17
22
  public publication (STAGE-ESM-032), foreign events/events-source captures (033),
18
23
  reaction identity (034), reaction filters (035) and production overrides (036).
19
24
  Reducer filters render. ESM v8 routes have construct checks including refusal of
@@ -26,8 +31,8 @@ checks are CLI `RenderedSemanticVersions.Newest` and Stage
26
31
  parser rejected `runs as` with PLAY0137; that is not a current parser refusal.
27
32
  The historical CLI 3.41.0 v7 canonical-corpus planning spec received
28
33
  STAGE-ESM-028/029 for generated values/responses.
29
- The detailed 4.24.x source/probe rows below have not been relabeled as current
30
- runtime verification; run admission on the actual bundled renderer.
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.
31
36
 
32
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`,
33
38
  `Semantics/SemanticCratisAdmission*.cs`, `SemanticSpecificationAdmission*.cs`,
@@ -63,25 +68,38 @@ model owner's decision.
63
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 |
64
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 |
65
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 |
66
- | `STAGE-ESM-010` | A query is not an optional snapshot lookup by the read-model identifier (or its argument concept has validation); each query is checked on its own, so several such queries are admitted | Keyed `XById => X optional` queries; lists, observable and filtered queries are gap-fill |
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`) |
67
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 |
68
73
  | `STAGE-ESM-012` | Generated C# names collide (properties, types, namespaces, constraints) | Rename |
69
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 |
70
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 |
71
- | `STAGE-ESM-015` | Authorization Stage cannot render exactly: opaque (code) policy, role-claim URI, expression not requiring authentication, claim compared with a non-text value, authorized command without exactly one identifier | `require authenticated and ...`; text-backed claim targets |
72
- | `STAGE-ESM-016` | Model language or semantic version is not ESM v1 to v4 (Stage 4.24.2; 4.24.1 and earlier: v1 to v3, so a v4 model was refused here); v5 and later constructs raise the version (v6 reactions and clocks; v7 generated values and responses, tracked in Stage#201) | Not fixable by editing: the model needs a newer renderer. Keep the model, record the gap, gap-fill |
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 |
73
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 |
74
79
  | `STAGE-ESM-018` | `$strings.` key missing in the default locale or containing formatting characters | Fix the strings |
75
80
  | `STAGE-ESM-019` | Reducer structure or body not admitted (outside a `StateView`, impure, does not compile) | An equivalent pure body, or gap-fill |
76
81
  | `STAGE-ESM-020` | Implementation body missing, changed (hash differs) or refused by the loader | Provide the body inside the model root |
77
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 |
78
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 |
79
- | `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.24.2): `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 |
80
- | `STAGE-ESM-024` | Ledger-only (4.24.1): every ESM v6 surface member is dispositioned Rejected. Not emitted on its own: the version gate raises `STAGE-ESM-016` first and refuses the whole v6 model | As `STAGE-ESM-016`: keep the model, record the gap, gap-fill |
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 scaffold pins 22.68.0, whose command handler accepts a collection only when every element is a command; a rendered app needs a proven dependency override; see `rendered-application.md`) |
81
93
  | `STAGE-ESM-023` | Information: transition bodies analysed | none |
82
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) |
83
95
  | `STAGE-AUTH-001` | Authorization cannot be rendered faithfully | As `STAGE-ESM-015` |
84
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.
85
103
 
86
104
  `STAGE-CRATIS-FILE-001`, `-INLINE-001`, `-QUERY-001`, `-KEY-001`, `-KEY-002`,
87
105
  `-PROJECTION-001` and `STAGE-EVENT-001` come from the legacy syntax renderer and the direct
@@ -163,7 +181,7 @@ context, no directives, no writes to statics, `throw` limited to
163
181
  pure expressions, and no generated type shadowing a referenced one. Anything else is
164
182
  `STAGE-ESM-019`, `-021` or `-022`. A reducer needs a `StateView` slice, its read model in the
165
183
  same slice, a required Guid or text identifier and a matching keyed query. Code validation
166
- (`STAGE-ESM-005`) and opaque policies (`STAGE-ESM-015`) are refused outright, and a command
184
+ (`STAGE-ESM-005`) is refused outright (opaque pure policies render at 4.73.1), and a command
167
185
  `handler` never binds (`PLAY0268`). Reducer rendering was read, not run, for this skill.
168
186
 
169
187
  ## Specification rules (`STAGE-ESM-011`)
@@ -181,13 +199,13 @@ From `SemanticSpecificationAdmission*.cs`; the first rule was also observed.
181
199
  when a read-model or reducer expectation must replay them, which needs distinct
182
200
  contracts), `then readmodel`, `then query` (one result, scalar key), `then error` naming a
183
201
  rendered constraint or an authored message, `then denied`.
184
- - Refused: `then no readmodel`, `when append`, composite values, `given readmodel` beside a
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
185
203
  command, error codes that name no rendered constraint, a `$context.occurred` mapping
186
204
  asserted without a supplied time, a query on a reducer-built read model, a protected
187
205
  query whose fixtures use streams other than the queried key.
188
206
  - A when-less specification is admitted only as `then denied` on an authorized keyed
189
207
  query, or `given readmodel` plus `then query` on an unprotected query.
190
- - Descriptions, comments and prose are never rendered.
208
+ - Descriptions and event documentation render only as XML doc comments (Stage 4.73.1); comments are never rendered; neither is behavior.
191
209
 
192
210
  ## Observed refusals
193
211
 
@@ -207,3 +225,34 @@ Each came from the first draft of the example model, rendered with cratis 3.27.1
207
225
  | cli reference: bodied reducers are unsupported (`STAGE-ESM-019`) | `PureTransitionAdmission` admits pure allowlisted bodies |
208
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) |
209
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.)
@@ -12,8 +12,8 @@
12
12
 
13
13
  ## CLI default versus Stage release
14
14
 
15
- CLI 3.50.0 bundles Screenplay 4.131.0 and Stage 4.67.0. Its default renderer
16
- applies case-table support introduced in Stage 4.59.0 and the whole-number rule
15
+ Current CLI/compiler/Stage pins: `cratis-screenplay-toolchain/references/versions.md`.
16
+ The pinned default renderer applies case-table support introduced in Stage 4.59.0 and the whole-number rule
17
17
  introduced in 4.61.0: v8+ whole numbers use `long`, earlier versions keep `int`.
18
18
  CLI and Stage admit through v10 to construct checks; newer versions receive
19
19
  CLI-RENDER-004 before planning (direct Stage: STAGE-ESM-016).
@@ -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; a role alone is `STAGE-ESM-015`.
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 |
@@ -1,25 +1,36 @@
1
1
  # The rendered application: scaffold, managed files and `Customizations/`
2
2
 
3
- Read at Stage `v4.24.0` (`Scaffolding/CratisBackendApplicationScaffold*.cs`,
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.51.3`,
11
- `Source/Rendering.Cratis/Scaffolding/CratisBackendApplicationScaffoldProfile.cs`,
12
- `CratisBackendApplicationScaffold.cs` and `CratisFrontendPackageSet.cs`.
13
- Earlier runtime/customization probes above keep their original labels.
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 testing) | `22.50.5` |
19
- | Chronicle client | `Cratis.Chronicle`, `.AspNetCore` and `.Testing` `19.32.0`, matched to the `cratis/chronicle:19.32.0-development` image in the compose file |
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 | xunit, NSubstitute, Cratis.Specifications; **Debug configuration only** (`IsTestProject` when Debug) |
22
- | Frontend | Vite and React, Components `4.14.0`, Scene `4.10.0`, Fundamentals `7.19.8` |
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.50.5 `ProtectedDecisionAttribute.cs`
31
- and `CommandDecisionReads.cs`, Chronicle v19.32.0 `DecisionRead.cs`/`IDecisionReads.cs`.
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. The compose file binds local ports `27017` and
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 in the frontend was not
49
- verified. The scaffold is a working shell, and the customization guide says screens stay
50
- managed; do not claim UI fidelity from a published render.
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
- Read at Stage `v4.24.0` (`README.md`, `Documentation/docker/index.md`,
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