@cratis/pi 7.86.0 → 7.87.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/corpus/harnesses/copilot/instructions/github-actions.instructions.md +5 -1
- package/package/corpus/rules/github-actions.md +5 -1
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/record-capture-specifications.md +5 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/constraints-produces-concurrency.md +3 -2
- package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +1 -0
- package/package/corpus/skills/cratis-screenplay-projections/references/joins.md +2 -1
- package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md +4 -0
- package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +7 -0
- package/package/corpus/skills/cratis-screenplay-toolchain/references/language-admission.md +4 -0
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/application-shell.md +19 -0
- package/package.json +1 -1
|
@@ -72,7 +72,11 @@ paths:
|
|
|
72
72
|
- A bot's pre-push verification build must match the strictest configuration any CI in
|
|
73
73
|
the organization applies to the same commit (build `Release` when consumers enforce
|
|
74
74
|
analyzers there). Do not add `[skip ci]` to bot commits as a load optimization: the
|
|
75
|
-
downstream CI run is the only check that sees the merged result.
|
|
75
|
+
downstream CI run is the only check that sees the merged result. One exception: a
|
|
76
|
+
bootstrap commit that changes **only** bootstrapped wrapper workflow files, whose
|
|
77
|
+
content the source repository's CI verified before the rollout, may carry
|
|
78
|
+
`[skip ci]` once the same wrapper content has landed with CI running in one canary
|
|
79
|
+
repository. Package-update bots, and any commit touching another file, keep normal CI.
|
|
76
80
|
- Comment-triggered agent workflows must gate on the trigger phrase in the job's `if:`
|
|
77
81
|
(for example `contains(github.event.comment.body, '@claude')`) so a runner only
|
|
78
82
|
starts when the agent is actually addressed.
|
|
@@ -71,7 +71,11 @@ paths:
|
|
|
71
71
|
- A bot's pre-push verification build must match the strictest configuration any CI in
|
|
72
72
|
the organization applies to the same commit (build `Release` when consumers enforce
|
|
73
73
|
analyzers there). Do not add `[skip ci]` to bot commits as a load optimization: the
|
|
74
|
-
downstream CI run is the only check that sees the merged result.
|
|
74
|
+
downstream CI run is the only check that sees the merged result. One exception: a
|
|
75
|
+
bootstrap commit that changes **only** bootstrapped wrapper workflow files, whose
|
|
76
|
+
content the source repository's CI verified before the rollout, may carry
|
|
77
|
+
`[skip ci]` once the same wrapper content has landed with CI running in one canary
|
|
78
|
+
repository. Package-update bots, and any commit touching another file, keep normal CI.
|
|
75
79
|
- Comment-triggered agent workflows must gate on the trigger phrase in the job's `if:`
|
|
76
80
|
(for example `contains(github.event.comment.body, '@claude')`) so a runner only
|
|
77
81
|
starts when the agent is actually addressed.
|
|
@@ -9,6 +9,11 @@ For `source api`, webhook, poll and other record sources, a first record of a ty
|
|
|
9
9
|
|
|
10
10
|
This applies independently to each child identity in its parent's previous collection and each nested record: a missing/null previous nested value is new, and every child of a new parent is new. Expression guards still evaluate the mapped current record on first sight; maps and unguarded appends keep their meaning. These record fixtures are not valid for `source events`: use typed events instead (automations-and-translations [public event captures](../../cratis-screenplay-automations-and-translations/references/public-events-and-direction.md)).
|
|
11
11
|
|
|
12
|
+
A capture **over events** carries a public event's list across the boundary two ways (decision 0098, no new ESM version): `lines = $.lines`
|
|
13
|
+
copies the whole list into a list property of the same shape (matched by property name), and `children lines identified by sku` with an
|
|
14
|
+
`append ... when added` makes one private event per element, so a repeated delivery appends nothing and one with an extra line appends only
|
|
15
|
+
that line. `nested <object>` scopes into an object the same way.
|
|
16
|
+
|
|
12
17
|
The complete model separates a new observation, an update and an unchanged repeat:
|
|
13
18
|
|
|
14
19
|
```screenplay
|
|
@@ -68,8 +68,9 @@ to the routed scope. This does not make command `reads` protected.
|
|
|
68
68
|
computed expressions parse but block binding (`PLAY0268`).
|
|
69
69
|
- **`for <identifier>`** on an indented line names the event source the event is
|
|
70
70
|
appended to. At most one per `produces`. To bind, it must name the command's
|
|
71
|
-
`identifier` property (`PLAY0273` otherwise; a `generated identifier` command, ESM v7, may name another required scalar property)
|
|
72
|
-
|
|
71
|
+
`identifier` property (`PLAY0273` otherwise; a `generated identifier` command, ESM v7, may name another required scalar property). From ESM v30 (decision 0098)
|
|
72
|
+
a command may append to several event sources: each `produces` may name any required scalar command property, and the events of one accepted command are appended
|
|
73
|
+
together. Optional and collection properties still cannot be destinations. A model using it selects v30; state each destination with `for` on the matching `then` event.
|
|
73
74
|
- **`tag`** lines apply literal tags to this append. Tags also exist on the
|
|
74
75
|
`event` declaration, where they apply to every append of that type.
|
|
75
76
|
- **Several unconditional `produces` blocks** are allowed — that is co-production,
|
package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
| `matches "<regex>"` | Portable linear dialect; any substring unless anchored `^…$`; invalid syntax PLAY0367, refused constructs PLAY0699 |
|
|
14
14
|
| `contains "<text>"` / `not contains "<text>"` | Ordinal substring presence/absence on scalar non-enum text |
|
|
15
15
|
| `starts with "<text>"` / `ends with "<text>"` | Ordinal prefix/suffix; quoted literal operands, not conditions |
|
|
16
|
+
| `decimals <= <n>` | `price decimals <= 2`; a `Decimal` property or concept only, `<n>` a whole number 0 to 28, trailing zeros do not count; ESM v29 (decision 0098) |
|
|
16
17
|
| `all > <v>` / `all >= <v>` | `lines.quantity all > 0` |
|
|
17
18
|
| `rule <Name>` | `orgNumber rule BeAValidOrganizationNumber` |
|
|
18
19
|
| `checksum luhn|mod11|mod97` | String concept `validate checksum luhn`; validates supplied/stored values too |
|
|
@@ -35,7 +35,8 @@ A join cannot declare its own key or trigger removal — that is
|
|
|
35
35
|
| `increment <prop>` | +1, expressing *modifying state* |
|
|
36
36
|
| `decrement <prop>` | −1 |
|
|
37
37
|
| `add <prop> by <expr>` | += expression |
|
|
38
|
-
| `
|
|
38
|
+
| `add <prop> by <a> * <b>` | += the exact product of two values (ESM v29, decision 0098); only after `by`, one `*` |
|
|
39
|
+
| `subtract <prop> by <expr>` | −= expression (also `by <a> * <b>`) |
|
|
39
40
|
|
|
40
41
|
`count` and `increment` behave identically; the difference is intent. The target
|
|
41
42
|
must be numeric.
|
package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md
CHANGED
|
@@ -66,6 +66,10 @@ specification RegistersWithPinnedValues
|
|
|
66
66
|
differences in response field order. An absent optional source yields `Null`; arrays compare in order.
|
|
67
67
|
- `then returns` counts as a success outcome but does not relax event comparison: a command specification with
|
|
68
68
|
no expected events still asserts that no facts were produced.
|
|
69
|
+
- A command that a **reaction** invokes takes its generated values from `given generated <Command>.<property> = <value>` lines
|
|
70
|
+
before the `when` (ESM v30, decision 0098). Each invocation takes the next value pinned for that
|
|
71
|
+
command and property in authored order; two invocations need two lines. The property must be `generated`; the value is a
|
|
72
|
+
concrete literal.
|
|
69
73
|
- If execution reaches generation without every generated value supplied, the run is `Unsupported(IdentityAllocation)` and
|
|
70
74
|
the specification never passes; nothing is invented. A denial or validation failure happens before generation and
|
|
71
75
|
keeps its own outcome.
|
package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md
CHANGED
|
@@ -59,6 +59,13 @@ module Collections
|
|
|
59
59
|
or mixed effects (`-037`). Single-hop reaction append specs render; deeper appends and
|
|
60
60
|
command specs cascading into reactions remain `-011`. Keep refused scope as gap-fill against this contract: `cratis-screenplay-render-and-gap-fill`.
|
|
61
61
|
|
|
62
|
+
### A command specification states the public event its slice publishes
|
|
63
|
+
|
|
64
|
+
When an outbound Translate slice publishes an event from the private events a command produces, the command's specification
|
|
65
|
+
lists the public event after the private ones (`then ProductPriceChanged` after `then ProductPriceSet`). `PLAY0285` follows the
|
|
66
|
+
outbound projection (decision 0098); the accepted path is proven where the command is. An exact fact count
|
|
67
|
+
fails without it.
|
|
68
|
+
|
|
62
69
|
### Version skew: cascades and the false `PLAY0285`
|
|
63
70
|
|
|
64
71
|
`PLAY0285` (a specification's expected event contradicts every producer of its
|
|
@@ -16,6 +16,10 @@ exact language/semantic pairs; binding, reference execution and rendering are se
|
|
|
16
16
|
| v26 | Chronological command Date/DateTime comparisons | Same-primitive `==`, `!=`, `>`, `>=`, `<`, `<=`; DateTime UTC ticks and pre-rule offset validation | v26 admitted; Host/executor run it; renderer supports admitted shapes with remaining STAGE-ESM-046 refusals; legacy engines refuse -046 |
|
|
17
17
|
| v27 | A read model with two or more `key` marks | Untyped projection `key` blocks, equality-filter lists, single-instance `by` blocks, per-part fixtures | v27 admitted; Host runs it, renderer refuses STAGE-ESM-048/-047, executor refuses specs over it |
|
|
18
18
|
| v28 | `==`/`!=` between Uuid values in command `require` and `produces when` | Uuid properties, Uuid concepts and identities, canonical literals; protected read paths in `require` only | v28 refused STAGE-ESM-016 |
|
|
19
|
+
| v29 | `decimals <= N`; `add`/`subtract` by `a * b`; a concept mapped to another concept over the same primitive (decision 0098) | Decimal-places rule on a Decimal concept or property; the exact decimal product; the conversion is admitted only when the target declares no rule or compliance the source does not, never for enums, composites or optional into required | v29 refused until Stage admits it |
|
|
20
|
+
| v30 | A command `produces ... for <required scalar property>` (several event sources); a specification `given generated <Command>.<property> = <value>` (decision 0098) | Several sources in one accepted command; pinned generated values for reaction-invoked commands, taken in authored order | v30 refused until Stage admits it |
|
|
21
|
+
|
|
22
|
+
Constructs of decision 0098 with no executable-model content need no version: application-level toolbar buttons in the layout's `navigation topbar` region (`button <id> title "..." slice <Slice>` with an optional indented `authorize <Policy>`), a command specification that states the public event its outbound Translate slice publishes (no more false `PLAY0285`), and a capture over events that copies a list (`lines = $.lines`) or fans out with `children lines identified by sku`. Check `screenplay --version` against the release that admitted v29 and v30 before relying on them.
|
|
19
23
|
|
|
20
24
|
Requires Screenplay 4.181.0 or later (`screenplay --version`) for atomic batches; older compilers cannot admit the preamble.
|
|
21
25
|
|
package/package/corpus/skills/cratis-screenplay-ui-composition/references/application-shell.md
CHANGED
|
@@ -166,6 +166,25 @@ own.
|
|
|
166
166
|
- `item` entries (`action`, `navigate to`, `dialog`) stay valid beside buttons. Use `button` to start a slice, and
|
|
167
167
|
`item ... navigate to` to go to a screen.
|
|
168
168
|
|
|
169
|
+
### Application-level buttons
|
|
170
|
+
|
|
171
|
+
A layout's `navigation topbar` region takes the same `button` line once for the whole application, so an action stays at hand
|
|
172
|
+
whichever page the user is on. An indented `authorize <Policy>` line under a button limits who sees it. A module's
|
|
173
|
+
`navigation topbar extends|overrides|inherits` governs the buttons as it does the items. A button in `navigation sidebar` is
|
|
174
|
+
`PLAY0741`. The slice rules above (`PLAY0761`-`PLAY0765`) apply unchanged (decision 0098).
|
|
175
|
+
|
|
176
|
+
```text
|
|
177
|
+
layout AppShell
|
|
178
|
+
category application
|
|
179
|
+
topbar
|
|
180
|
+
navigation contributes Navigation
|
|
181
|
+
content
|
|
182
|
+
navigation topbar
|
|
183
|
+
item shop title "Shop" target Shop
|
|
184
|
+
button newProduct title "New product" slice Merchandising.Products.DraftProduct emphasis primary icon plus
|
|
185
|
+
authorize CanCurateCatalog
|
|
186
|
+
```
|
|
187
|
+
|
|
169
188
|
⚠️ When a screen uses a `template`, put the `toolbar` inside a slot body (`body` above). Stage refuses a screen that
|
|
170
189
|
mixes a top-level `template` directive with other top-level directives.
|
|
171
190
|
|