@cratis/pi 7.19.0 → 7.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/corpus/rules/concepts.md +10 -2
- package/package/corpus/rules/vertical-slices.md +4 -2
- package/package/corpus/skills/cratis-fundamentals-concept/SKILL.md +58 -5
- package/package/corpus/skills/cratis-fundamentals-concept/verification.json +4 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/screen-authoring-workflow.md +13 -8
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +7 -6
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +3 -3
- package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +3 -4
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +21 -14
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +24 -21
- package/package.json +1 -1
|
@@ -64,15 +64,23 @@ public record AuthorName(string Value) : ConceptAs<string>(Value)
|
|
|
64
64
|
## Chronicle stream identity rules
|
|
65
65
|
|
|
66
66
|
```csharp
|
|
67
|
-
public record AuthorId(Guid Value) : EventSourceId<Guid>(Value)
|
|
67
|
+
public record AuthorId(Guid Value) : EventSourceId<Guid>(Value), IGeneratable<AuthorId>
|
|
68
68
|
{
|
|
69
|
-
public static AuthorId New() => new(
|
|
69
|
+
public static AuthorId New() => new(GenerateValue.Uuid());
|
|
70
70
|
public static implicit operator AuthorId(Guid value) => new(value);
|
|
71
71
|
}
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
- `New()`, primitive → derived ID conversion, and sentinels are optional domain
|
|
75
75
|
conveniences; `EventSourceId<T>` does not create an arbitrary derived type.
|
|
76
|
+
- When the system creates the value, implement `IGeneratable<TSelf>` and use
|
|
77
|
+
`GenerateValue.Uuid()` (or `GenerateValue.UuidV7()` when index locality
|
|
78
|
+
matters), both from `Cratis.Concepts` in Cratis.Fundamentals 7.23.0 or later.
|
|
79
|
+
Never `System.Random`. A client-supplied identifier is an input, not something
|
|
80
|
+
to generate; see the **cratis-fundamentals-concept** skill.
|
|
81
|
+
- Arc and Chronicle can resolve an older Cratis.Fundamentals. Check the resolved
|
|
82
|
+
version first; if it is below 7.23.0, add a direct `Cratis.Fundamentals`
|
|
83
|
+
7.23.0 or later reference, or keep the existing `static New()` (without the interface) until you can.
|
|
76
84
|
- The exact `EventSourceId<T>` base supports conversions among its underlying
|
|
77
85
|
`T`, string, typed ID, and untyped `EventSourceId`, but those operators do not
|
|
78
86
|
construct your derived domain record from every source form.
|
|
@@ -54,10 +54,10 @@ Every domain identifier or named value is a typed record — raw `string`/`Guid`
|
|
|
54
54
|
- **[contract] Chronicle stream identities** derive from `EventSourceId<T>` with an `IComparable` underlying primitive. Add `NotSet`, `New()`, or a `T` → derived-id operator only when the domain API justifies it; typed empty/zero values are real specified stream IDs. The base conversion surface does not construct every derived domain record automatically.
|
|
55
55
|
|
|
56
56
|
```csharp
|
|
57
|
-
public record AuthorId(Guid Value) : EventSourceId<Guid>(Value)
|
|
57
|
+
public record AuthorId(Guid Value) : EventSourceId<Guid>(Value), IGeneratable<AuthorId>
|
|
58
58
|
{
|
|
59
59
|
public static readonly AuthorId NotSet = new(Guid.Empty);
|
|
60
|
-
public static AuthorId New() => new(
|
|
60
|
+
public static AuthorId New() => new(GenerateValue.Uuid());
|
|
61
61
|
public static implicit operator AuthorId(Guid value) => new(value);
|
|
62
62
|
}
|
|
63
63
|
|
|
@@ -67,6 +67,8 @@ public record AuthorName(string Value) : ConceptAs<string>(Value)
|
|
|
67
67
|
}
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
+
`IGeneratable<T>` and `GenerateValue` need Cratis.Fundamentals 7.23.0 or later. Arc and Chronicle can resolve an older version; add a direct reference or keep a plain `static New()` until then (see [concepts.md](./concepts.md)).
|
|
71
|
+
|
|
70
72
|
**[convention] Placement:** slice-specific concept → in the slice file; feature-shared → feature folder; module-shared → module folder; app-wide → `Common/`. Scan `Common/` and the feature folder before creating a new concept. See [concepts.md](./concepts.md) for full patterns, or invoke the **cratis-fundamentals-concept** skill.
|
|
71
73
|
|
|
72
74
|
## Commands
|
|
@@ -15,7 +15,7 @@ This skill is verified against these exact public releases:
|
|
|
15
15
|
|
|
16
16
|
| Package | Version | Purpose |
|
|
17
17
|
| --- | --- | --- |
|
|
18
|
-
| `Cratis.Fundamentals` | `7.
|
|
18
|
+
| `Cratis.Fundamentals` | `7.23.0` | `Cratis.Concepts.ConceptAs<T>`, `IGeneratable<TSelf>` and `GenerateValue` |
|
|
19
19
|
| `Cratis.Chronicle` | `18.3.0` | `Cratis.Chronicle.Events.EventSourceId` and `EventSourceId<T>` |
|
|
20
20
|
|
|
21
21
|
Reverify product sources before claiming support for another version.
|
|
@@ -76,6 +76,55 @@ A `NotSet` or `Empty` value is optional domain policy. Add one only when the
|
|
|
76
76
|
chosen primitive value is impossible or explicitly reserved in that domain.
|
|
77
77
|
Do not assume `string.Empty`, `0`, or `Guid.Empty` is universally invalid.
|
|
78
78
|
|
|
79
|
+
## Let a concept generate its own value
|
|
80
|
+
|
|
81
|
+
Check the Cratis.Fundamentals version the project resolves first. Arc and
|
|
82
|
+
Chronicle can bring an older one; when it is below 7.23.0, add a direct
|
|
83
|
+
`Cratis.Fundamentals` 7.23.0 or later package reference, or keep the existing
|
|
84
|
+
`static New()` (without the interface) until you can.
|
|
85
|
+
|
|
86
|
+
When the system, not the caller, creates a value, the concept declares how by
|
|
87
|
+
implementing `IGeneratable<TSelf>` (`Cratis.Concepts`, Cratis.Fundamentals
|
|
88
|
+
7.23.0 or later). The interface requires `static abstract TSelf New()`, so
|
|
89
|
+
generic code constrained on `where T : IGeneratable<T>` calls `T.New()` without
|
|
90
|
+
reflection. Generate a UUID with `GenerateValue`, never with `Guid.NewGuid()` in
|
|
91
|
+
scattered call sites and never with `System.Random`:
|
|
92
|
+
|
|
93
|
+
```csharp
|
|
94
|
+
using Cratis.Concepts;
|
|
95
|
+
|
|
96
|
+
public record <ConceptName>(Guid Value) : ConceptAs<Guid>(Value), IGeneratable<<ConceptName>>
|
|
97
|
+
{
|
|
98
|
+
public static <ConceptName> New() => new(GenerateValue.Uuid());
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Both helpers return a `Guid` with the RFC 9562 variant and fill their random
|
|
103
|
+
bits from `RandomNumberGenerator`:
|
|
104
|
+
|
|
105
|
+
- `GenerateValue.Uuid()` — version 4, 122 random bits. The default.
|
|
106
|
+
- `GenerateValue.UuidV7()` — version 7: Unix-epoch milliseconds first, then 74
|
|
107
|
+
random bits. Choose it only when database index locality or rough creation
|
|
108
|
+
order matters, after checking how the database stores and compares UUIDs. It reveals the creation time, it is **not** monotonic within a
|
|
109
|
+
millisecond, and clock adjustments can reorder values.
|
|
110
|
+
|
|
111
|
+
Neither helper guarantees uniqueness; a collision is extremely unlikely, not
|
|
112
|
+
impossible. `IGeneratable<TSelf>` is not limited to Guid-backed concepts, but
|
|
113
|
+
`GenerateValue` only produces UUIDs.
|
|
114
|
+
|
|
115
|
+
Do not generate when:
|
|
116
|
+
|
|
117
|
+
- The client supplies the identifier. It is an input; keep it.
|
|
118
|
+
- The value must be secret or authenticate someone. A UUID is an identifier,
|
|
119
|
+
not a token; use a dedicated secure-token API.
|
|
120
|
+
- The same input must yield the same value. Random generation is not
|
|
121
|
+
idempotency; derive the value deterministically, or persist and reuse the
|
|
122
|
+
first one.
|
|
123
|
+
|
|
124
|
+
In specifications, construct the concept from a known value
|
|
125
|
+
(`new <ConceptName>(Guid.Parse("…"))`) and assert against it. Do not seed or
|
|
126
|
+
replace the generator. Guide: `/fundamentals/csharp/generating-values/`.
|
|
127
|
+
|
|
79
128
|
## Create a Guid-backed Chronicle stream identity
|
|
80
129
|
|
|
81
130
|
Use this shape only for an identity actually supplied to Chronicle append/read
|
|
@@ -86,6 +135,7 @@ operations as the event-source ID.
|
|
|
86
135
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
87
136
|
|
|
88
137
|
using Cratis.Chronicle.Events;
|
|
138
|
+
using Cratis.Concepts;
|
|
89
139
|
|
|
90
140
|
namespace <NamespaceRoot>.<Feature>;
|
|
91
141
|
|
|
@@ -93,13 +143,13 @@ namespace <NamespaceRoot>.<Feature>;
|
|
|
93
143
|
/// Represents the event-source identity of a <description>.
|
|
94
144
|
/// </summary>
|
|
95
145
|
/// <param name="Value">The underlying Guid value.</param>
|
|
96
|
-
public record <ConceptName>(Guid Value) : EventSourceId<Guid>(Value)
|
|
146
|
+
public record <ConceptName>(Guid Value) : EventSourceId<Guid>(Value), IGeneratable<<ConceptName>>
|
|
97
147
|
{
|
|
98
148
|
/// <summary>
|
|
99
149
|
/// Creates a new <ConceptName>.
|
|
100
150
|
/// </summary>
|
|
101
151
|
/// <returns>A new <ConceptName>.</returns>
|
|
102
|
-
public static <ConceptName> New() => new(
|
|
152
|
+
public static <ConceptName> New() => new(GenerateValue.Uuid());
|
|
103
153
|
|
|
104
154
|
/// <summary>
|
|
105
155
|
/// Converts a Guid to a <ConceptName>.
|
|
@@ -108,8 +158,8 @@ public record <ConceptName>(Guid Value) : EventSourceId<Guid>(Value)
|
|
|
108
158
|
}
|
|
109
159
|
```
|
|
110
160
|
|
|
111
|
-
`New()` and the primitive-to-derived conversion
|
|
112
|
-
type. `EventSourceId<T>` does not construct an arbitrary derived identity for
|
|
161
|
+
`New()` (through `IGeneratable<TSelf>`) and the primitive-to-derived conversion
|
|
162
|
+
are conveniences on this domain type. `EventSourceId<T>` does not construct an arbitrary derived identity for
|
|
113
163
|
you.
|
|
114
164
|
|
|
115
165
|
## Create a non-Guid Chronicle stream identity
|
|
@@ -185,6 +235,9 @@ repository structure.
|
|
|
185
235
|
- `ConceptAs<T>` and `EventSourceId<T>` use an `IComparable` underlying type.
|
|
186
236
|
- A concept contains exactly one wrapped value and no extra properties.
|
|
187
237
|
- Enums remain enums.
|
|
238
|
+
- A concept that creates its own value implements `IGeneratable<TSelf>`; a
|
|
239
|
+
Guid-backed one uses `GenerateValue`, not `Guid.NewGuid()` or `Random`.
|
|
240
|
+
Client-supplied, secret or idempotent values are not generated.
|
|
188
241
|
- Null absence uses a nullable concept reference rather than a null wrapped
|
|
189
242
|
value.
|
|
190
243
|
- Primitive-to-derived conversions and sentinels exist only when justified by
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
"input": "Create a strongly typed value for a domain concept.",
|
|
4
4
|
"fixtures": [],
|
|
5
5
|
"assertions": [
|
|
6
|
-
{ "kind": "skill-contains", "value": "ConceptAs<T>" }
|
|
6
|
+
{ "kind": "skill-contains", "value": "ConceptAs<T>" },
|
|
7
|
+
{ "kind": "skill-contains", "value": "IGeneratable<TSelf>" },
|
|
8
|
+
{ "kind": "skill-contains", "value": "GenerateValue.Uuid()" },
|
|
9
|
+
{ "kind": "skill-contains", "value": "not** monotonic within a" }
|
|
7
10
|
]
|
|
8
11
|
}
|
|
@@ -121,13 +121,12 @@ not to the AI corpus. Link to the fixture path and run its published checks; do
|
|
|
121
121
|
copy those `.play` files into `.cratis/ai/` or into a skill reference as a
|
|
122
122
|
maintained duplicate.
|
|
123
123
|
|
|
124
|
-
|
|
124
|
+
Verified public vector and executable checks:
|
|
125
125
|
|
|
126
|
-
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
`
|
|
130
|
-
Screenplay 4.105.0, so keep the package pairing visible;
|
|
126
|
+
- toolchain: public CLI 3.40.7 (`af9f18e`), whose default runtime is
|
|
127
|
+
`cratis/stage:4.51.1` and which bundles Screenplay 4.114.0. Latest public
|
|
128
|
+
packages are Scene 4.14.0, Screenplay 4.122.0, Stage 4.51.3 and Studio 0.141;
|
|
129
|
+
claims made through `cratis` are 4.114.0 compiler claims;
|
|
131
130
|
- fixture root: `Source/DotNET/Screenplay.CanonicalCorpus/Corpus/ScreenComposition/v1/source/folder`
|
|
132
131
|
in the Screenplay repository;
|
|
133
132
|
- Screenplay repo tool (available checkout): `dotnet run --project Source/DotNET/Tool
|
|
@@ -140,9 +139,15 @@ Round-5 vector and executable checks (2026-10-09):
|
|
|
140
139
|
`apply`, real `apply` and `open-workspace` again. It uses a scratch copy,
|
|
141
140
|
changes `application.play` with a comment-preservation probe, fails closed on a
|
|
142
141
|
stale revision, applies with the matching revision and verifies the comment
|
|
143
|
-
remains on disk
|
|
142
|
+
remains on disk. On CLI 3.40.7: 9 requests and 9 responses, 37 tools,
|
|
143
|
+
`executableReady true`, stale apply `StaleRevision`, comment preserved;
|
|
144
144
|
- render (`cratis render <corpus-folder> --name ScreenComposition --destination
|
|
145
|
-
<dir> -o json`) with
|
|
145
|
+
<dir> -o json`) with CLI 3.40.7 publishes the corpus, and its browser
|
|
146
|
+
acceptance run passes 51 assertions (Cratis/Screenplay#605);
|
|
147
|
+
- still refused by design: guarded Close (`STAGE-SCENE-ACTION-001`) and
|
|
148
|
+
double-click (`STAGE-SCENE-INTERACTION-001`); still pending: UI-profile
|
|
149
|
+
rejection and render-then-recover (Cratis/cli#301) and Studio production Play
|
|
150
|
+
proof (test-account decision).
|
|
146
151
|
|
|
147
152
|
Report a corpus the released compiler, MCP server or renderer refuses as a
|
|
148
153
|
capability/version-pairing gap with the exact diagnostics; never soften it to a
|
|
@@ -25,14 +25,15 @@ Version pins live once in `cratis-screenplay-toolchain` `references/versions.md`
|
|
|
25
25
|
|
|
26
26
|
| Source | Pin | Used for |
|
|
27
27
|
| --- | --- | --- |
|
|
28
|
-
| cratis CLI | `3.40.
|
|
29
|
-
| Stage | `4.
|
|
30
|
-
| Screenplay | `4.114.0
|
|
31
|
-
| Rendered apps | Arc `22.25.0`, Chronicle `19.8.1`, Scene packages | `[ProtectedDecision]` (Arc 22.39.0 and later) is not available in code written into one; verify the generated package set before claiming exact Scene 4.
|
|
28
|
+
| cratis CLI | `3.40.7` (`v3.40.7`, `af9f18e`) | `cratis render` options, exit codes, publication receipt; tag pins Stage 4.51.1 and Screenplay 4.114.0, with `cratis/stage:4.51.1` as the runtime image. UI-profile rejection and render-then-recover fixes are pending in Cratis/cli#301. Reading baselines: 3.40.3, 3.39.0 and 3.28.3 (`8b43fef`) |
|
|
29
|
+
| Stage | `4.51.1` (CLI default; latest package 4.51.3) | admission (`STAGE-ESM-*`, and `PLAY0268` render refusals surfaced by the CLI), ownership manifest, `Customizations/` seams, Debug-only specifications, fail-closed guarded actions (`STAGE-SCENE-ACTION-001`) and interactions (`STAGE-SCENE-INTERACTION-001`). Older baselines: 4.49.5, 4.43.0 and `v4.24.2` (`32dcac4`) |
|
|
30
|
+
| Screenplay | bundled `4.114.0`; latest language package `4.122.0` | standalone compiler for V1 to V3; binding codes `PLAY0268` and the code-attachment rules, read at `v4.66.0`; claims made through `cratis` are 4.114.0 claims |
|
|
31
|
+
| Rendered apps | Arc `22.25.0`, Chronicle `19.8.1`, Scene packages | `[ProtectedDecision]` (Arc 22.39.0 and later) is not available in code written into one; verify the generated package set before claiming exact Scene 4.14.0 runtime parity |
|
|
32
32
|
|
|
33
33
|
Facts were read at those tags and `cratis render` was run at 3.28.2 and 3.28.3 for the worked example
|
|
34
|
-
(`references/worked-example.md`); with
|
|
35
|
-
`ScreenComposition` corpus and published successfully
|
|
34
|
+
(`references/worked-example.md`); with public CLI 3.40.7 it was run over the canonical
|
|
35
|
+
`ScreenComposition` corpus and published successfully, and its browser acceptance run passed 51
|
|
36
|
+
assertions (Cratis/Screenplay#605). The AI repository's `screenplay-mcp-transcript.ts`
|
|
36
37
|
harness proves the real stdio proposal/apply path against the packaged CLI. The renderer facts are owned by `cratis-stage-rendering-and-sandbox`;
|
|
37
38
|
this skill links them and never restates the admission table.
|
|
38
39
|
|
|
@@ -25,9 +25,9 @@ When choosing or upgrading a tool, or checking version-specific capabilities, re
|
|
|
25
25
|
| Package | Version | Purpose |
|
|
26
26
|
| --- | --- | --- |
|
|
27
27
|
| `Cratis.Screenplay.Tool` | `4.68.0` (`79801bf`) | standalone compiler, binder and MCP server; admits ESM v7 (generated values and responses) |
|
|
28
|
-
| cratis CLI | `3.40.
|
|
29
|
-
| Screenplay | `4.114.0
|
|
30
|
-
| Stage | `4.
|
|
28
|
+
| cratis CLI | `3.40.7` (`v3.40.7`, `af9f18e`) | Tag pins Stage 4.51.1 and Screenplay 4.114.0, with `cratis/stage:4.51.1` as the runtime image. The public CLI executed render publication, the browser acceptance run and the real stdio MCP transcript harness (37 tools, `executableReady true`). Reading baselines: 3.40.3, 3.39.0 and 3.28.3 (`8b43fef`) |
|
|
29
|
+
| Screenplay | bundled `4.114.0`; latest language package `4.122.0` | CLI 3.40.7 bundles 4.114.0 and reports `sourceSuccess true`, `semanticSuccess true`, `executableReady true` for the canonical corpus; the repo tool compiles it with `10 file(s) compiled - 0 error(s), 0 warning(s)`. Language features newer than 4.114.0 need the standalone 4.122.0 tool until a CLI bundles them |
|
|
30
|
+
| Stage | `4.51.1` (CLI default; latest package 4.51.3) | Docker image `cratis/stage:4.51.1`; renders the canonical screen corpus with Arc `CommandForm` shells and query bindings, and refuses guarded Close and double-click with `STAGE-SCENE-ACTION-001` / `STAGE-SCENE-INTERACTION-001`. Check generated package sets before claiming exact Scene 4.14 runtime parity |
|
|
31
31
|
| Arc / Chronicle | `22.50.5` / `19.32.0` | code-level facts cited here |
|
|
32
32
|
|
|
33
33
|
Facts were read with `git show <tag>:<path>` and probed on the installed tools. Behaviour
|
|
@@ -225,10 +225,9 @@ same typed navigate binding a screen action uses.
|
|
|
225
225
|
⚠️ The v4.31.0 baseline, re-verified at v4.66.0, ships `navigate`, `label` and `order` only. Grouping beyond a
|
|
226
226
|
flat ordered list, and an explicit override for when nearest-enclosing is not the
|
|
227
227
|
point you mean, are deliberately left for later. The screens-release vector
|
|
228
|
-
(
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
proof separate from render publication.
|
|
228
|
+
(canonical `ScreenComposition` corpus v1) adds typed screen composition; public
|
|
229
|
+
CLI 3.40.7 renders it and passes the browser run. Report a refused form as a
|
|
230
|
+
capability gap, never a flat-list fallback; Studio production proof is separate.
|
|
232
231
|
|
|
233
232
|
## Interactions — what a click does
|
|
234
233
|
|
|
@@ -31,20 +31,27 @@ hand-writing an alternate shape.
|
|
|
31
31
|
without dropping it, silently falling back or replacing it with a default.
|
|
32
32
|
|
|
33
33
|
Keep those three lines separate in reports. Correct an old limitation only when
|
|
34
|
-
the package/version you are using proves the new level.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
34
|
+
the package/version you are using proves the new level. Verified public vector:
|
|
35
|
+
CLI 3.40.7 with its default `cratis/stage:4.51.1` and bundled Screenplay 4.114.0;
|
|
36
|
+
latest public packages are Scene 4.14.0, Screenplay 4.122.0, Stage 4.51.3 and
|
|
37
|
+
Studio 0.141. All three levels hold for the canonical `ScreenComposition` corpus
|
|
38
|
+
on that CLI:
|
|
39
|
+
|
|
40
|
+
- authoring and executable admission: MCP opens it with `sourceSuccess true`,
|
|
41
|
+
`semanticSuccess true`, `executableReady true`, and the stdio MCP harness sends
|
|
42
|
+
real proposal/apply requests, rejects a stale revision and preserves an
|
|
43
|
+
authored comment on disk;
|
|
44
|
+
- runtime: render publishes, and the browser acceptance run passes 51
|
|
45
|
+
assertions with none blocked or pending (Cratis/Screenplay#605) - native
|
|
46
|
+
command forms, required fields, scoped comments, deep links, stale-response
|
|
47
|
+
handling and theme included.
|
|
48
|
+
|
|
49
|
+
Still true on that vector: a guarded Close action and a double-click interaction
|
|
50
|
+
are refused (`STAGE-SCENE-ACTION-001`, `STAGE-SCENE-INTERACTION-001`) and recorded
|
|
51
|
+
as unsupported, never emulated; refusing an unresolvable UI profile and recovering
|
|
52
|
+
a rendered application are pending in Cratis/cli#301; Studio production Play
|
|
53
|
+
proof is pending a test-account decision. On Stage 4.24.2 or cratis 3.28.x
|
|
54
|
+
renderers, authored screens are still reported as omitted/default composition.
|
|
48
55
|
|
|
49
56
|
## Data context and component bindings
|
|
50
57
|
|
|
@@ -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 narrow model shape Stage 4.
|
|
3
|
+
description: "What Cratis Stage and `cratis render` actually do with a Screenplay `.play` model today: the narrow model shape Stage 4.51 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`)."
|
|
4
4
|
license: MIT
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -18,14 +18,16 @@ reading in this skill is not a render result.
|
|
|
18
18
|
|
|
19
19
|
Authored UI has its own parity hazard. Stage 4.24 rendered a default React/Vite
|
|
20
20
|
scaffold and did not prove that modeled screens, templates, forms, toolbars,
|
|
21
|
-
components, outlets, package icons or routes were implemented. The
|
|
22
|
-
vector is
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
components, outlets, package icons or routes were implemented. The first fully
|
|
22
|
+
passing public browser vector is CLI 3.40.7 with its default `cratis/stage:4.51.1`
|
|
23
|
+
and bundled Screenplay 4.114.0: 51 browser assertions passed, none blocked or
|
|
24
|
+
pending (recorded in Cratis/Screenplay#605). Native command forms, required
|
|
25
|
+
fields, scoped comments, deep links, stale-response handling and theme all pass
|
|
26
|
+
there. Two behaviors stay fail-closed by design: a guarded Close action
|
|
27
|
+
(`STAGE-SCENE-ACTION-001`) and a double-click interaction
|
|
28
|
+
(`STAGE-SCENE-INTERACTION-001`) are refused and recorded as unsupported
|
|
29
|
+
capabilities, never emulated. Require a generated plan or artifact entry for every
|
|
30
|
+
authored UI construct, and report every unsupported UI directive as a diagnostic.
|
|
29
31
|
Silent fallback to a default screen is a failure, not a partial render.
|
|
30
32
|
|
|
31
33
|
## Specification runner exit codes
|
|
@@ -39,10 +41,10 @@ argument or an invalid semantic option.
|
|
|
39
41
|
|
|
40
42
|
| Source | Pin | Notes |
|
|
41
43
|
| --- | --- | --- |
|
|
42
|
-
| Stage | `4.
|
|
43
|
-
| cratis CLI | `3.40.
|
|
44
|
-
| Screenplay | `4.114.0
|
|
45
|
-
| Rendered applications | Arc, Chronicle, Scene 4.
|
|
44
|
+
| Stage | `4.51.1` (`v4.51.1`, `0fe4a63`) as the CLI default; latest public package `4.51.3` (`e7dc0a0`) | Renderer, sandbox host, spec runner; the CLI 3.40.7 default image is `cratis/stage:4.51.1`. Defines `STAGE-SCENE-ACTION-001` and `STAGE-SCENE-INTERACTION-001`. Earlier executed baselines: 4.49.5, 4.43.0 and `v4.24.2` (`32dcac4`) |
|
|
45
|
+
| cratis CLI | `3.40.7` (`v3.40.7`, `af9f18e`) | `cratis render`, `cratis run`; the tag pins `StageVersion` 4.51.1 and `ScreenplayVersion` 4.114.0. The public CLI renders the canonical corpus and runs the stdio MCP transcript. Unresolvable UI-profile rejection and render-then-recover fixes are pending in Cratis/cli#301. Older baseline: `v3.28.2` (`141c499`, Cratis/cli#253) |
|
|
46
|
+
| Screenplay | bundled `4.114.0`; latest public language package `4.122.0` | The CLI bundles 4.114.0, so compiler claims made through `cratis` are 4.114.0 claims; use the standalone 4.122.0 tool only for language features newer than the bundle |
|
|
47
|
+
| Rendered applications | Arc, Chronicle, Scene 4.14.0, .NET 10 | CLI 3.40.7 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 |
|
|
46
48
|
|
|
47
49
|
Everything below was read at those tags (`Source/Rendering.Cratis/**`, `README.md`,
|
|
48
50
|
`Documentation/**` in Stage; `Source/Cli/Commands/Render/**` and
|
|
@@ -51,10 +53,11 @@ Everything below was read at those tags (`Source/Rendering.Cratis/**`, `README.m
|
|
|
51
53
|
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,
|
|
52
54
|
Chronicle 19.32.0 and the tool split) is in the `cratis-screenplay-toolchain` skill,
|
|
53
55
|
`references/versions.md`. Rendered apps are on Arc `22.25.0`, so `[ProtectedDecision]`
|
|
54
|
-
(Arc 22.39.0 and later) is not available in code written into one. Screen
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
56
|
+
(Arc 22.39.0 and later) is not available in code written into one. Screen render
|
|
57
|
+
publication and browser behavior for the canonical corpus are verified on public
|
|
58
|
+
CLI 3.40.7 / `cratis/stage:4.51.1`. Studio 0.141 is released and production runs
|
|
59
|
+
v0.139.0 or later, but production UI automation is pending a
|
|
60
|
+
test-account decision, so Studio production Play proof is not claimed.
|
|
58
61
|
|
|
59
62
|
## Model-first rule
|
|
60
63
|
|
|
@@ -185,10 +188,10 @@ read models `when_<snake>_is_projected`.
|
|
|
185
188
|
|
|
186
189
|
For UI, record what the generated output claims separately from what the model
|
|
187
190
|
authored. On Stage 4.24 the generated scaffold is not screen parity evidence.
|
|
188
|
-
On
|
|
189
|
-
`scene.json` contains Arc `commandForm` components
|
|
190
|
-
|
|
191
|
-
|
|
191
|
+
On public CLI 3.40.7 / `cratis/stage:4.51.1` the canonical corpus publishes,
|
|
192
|
+
`scene.json` contains Arc `commandForm` components, `src/bindings.ts` registers
|
|
193
|
+
the modeled commands and queries, and the browser acceptance run passes. That is
|
|
194
|
+
not Studio production proof. Require an explicit plan, manifest entry or
|
|
192
195
|
generated artifact for each
|
|
193
196
|
screen/template/form/toolbar/component/outlet/route/package-icon use, or a
|
|
194
197
|
blocking diagnostic explaining why it was not generated.
|