@cratis/pi 7.91.0 → 7.92.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/product-sync.json +2 -2
- package/package/corpus/skills/cratis-screenplay-command-surface/references/inline-events.md +4 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +7 -4
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/property-links.md +22 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/repairs.md +5 -2
- package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +4 -1
- package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +1 -1
- package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +6 -1
- package/package/corpus/skills/cratis-screenplay-specifications/references/vocabulary.md +4 -0
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +3 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
- package/package.json +1 -1
|
@@ -80,6 +80,9 @@ MCP can declare a missing produced event (`PLAY0166`), add explicit routing
|
|
|
80
80
|
(`PLAY0478`), remove a redundant pin (`PLAY0471`), or remove an inline identifier
|
|
81
81
|
copy (`PLAY0469`). The last **changes the event contract**, retires a property,
|
|
82
82
|
refuses affected consumers/opaque implementations and is not fix-all. It does
|
|
83
|
-
not establish that stored data is safe to migrate
|
|
83
|
+
not establish that stored data is safe to migrate; for a contract that may have been
|
|
84
|
+
stored, `propose-property` `remove` with `newGeneration: true` extracts the event and
|
|
85
|
+
drafts a new generation (a source draft, never deployment ready; requires Screenplay
|
|
86
|
+
4.232.0, `screenplay --version`). Use
|
|
84
87
|
`cratis-screenplay-model-authoring` for discovery, preview, extraction and rename.
|
|
85
88
|
|
|
@@ -175,7 +175,7 @@ Choose formatting and disclose dropped comments before apply:
|
|
|
175
175
|
|
|
176
176
|
## Repair or extract before rewriting
|
|
177
177
|
|
|
178
|
-
Read `read-workspace` with `view: "repairs"` at the same revision as diagnostics and pass the repair to `propose-repair`; use `propose-extract-inline-event` before adding generations. `PLAY0469` changes the event contract, so ask about stored contracts first. No automatic generation-evolution repair ships. `PLAY0479`: migrate optionality spelling with `PreserveTrivia`. `eventNeverPersisted: true` cannot unfreeze admitted revisions. Differing event pins carry `storedName` in ESM v16, shared by all generations and unique (PLAY0472). Read [references/repairs.md](references/repairs.md) when fixing `PLAY0166`, `PLAY0478`, `PLAY0516` or `PLAY0683`, or admitting a [release baseline](references/release-baseline.md). Read [references/destination-intent-repair.md](references/destination-intent-repair.md) when `PLAY0470` needs a repair.
|
|
178
|
+
Read `read-workspace` with `view: "repairs"` at the same revision as diagnostics and pass the repair to `propose-repair`; use `propose-extract-inline-event` before adding generations, or let a `remove` with `newGeneration: true` extract the inline event itself, as [property links](references/property-links.md) describes. `PLAY0469` changes the event contract, so ask about stored contracts first. No automatic generation-evolution repair ships. `PLAY0479`: migrate optionality spelling with `PreserveTrivia`. `eventNeverPersisted: true` cannot unfreeze admitted revisions. Differing event pins carry `storedName` in ESM v16, shared by all generations and unique (PLAY0472). Read [references/repairs.md](references/repairs.md) when fixing `PLAY0166`, `PLAY0478`, `PLAY0516` or `PLAY0683`, or admitting a [release baseline](references/release-baseline.md). Read [references/destination-intent-repair.md](references/destination-intent-repair.md) when `PLAY0470` needs a repair.
|
|
179
179
|
|
|
180
180
|
## Choose a readable layout
|
|
181
181
|
|
|
@@ -319,7 +319,7 @@ with `view: "diagnostics"`, then `view: "repairs"` at the current revision.
|
|
|
319
319
|
| `PLAY0166` | Declare a missing command-produced event in its slice. Infer known command-path types (retaining concepts) or `$context.occurred` as `DateTime`; refuse uncertain/conflicting shapes, imports, existing declarations, cross-file producers and parser-invalid workspaces. |
|
|
320
320
|
| `PLAY0478` | Add `for <identifier>` to a plain production. Both models must be executable; refuse a version change or retargeting another production. This changes routing: accept only if the identifier, not allocation, is intended; `canFixAll: false`. |
|
|
321
321
|
| `PLAY0471` | Remove a redundant event id only with unchanged executable model, catalog and comments. |
|
|
322
|
-
| `PLAY0469` | Remove an inline same-source identifier property and mapping, retiring its semantic address. This changes the contract; `canFixAll` is false. Refuse other consumers, opaque impact, changed routing or comment loss. Plain contracts get guidance only. |
|
|
322
|
+
| `PLAY0469` | Remove an inline same-source identifier property and mapping, retiring its semantic address. This changes the contract; `canFixAll` is false. Refuse other consumers, opaque impact, changed routing or comment loss. Plain contracts get guidance only. For a contract that may have been stored, use `propose-property` `remove` with `newGeneration: true` instead. |
|
|
323
323
|
| `PLAY0479` | Migrate one optional type spelling, or all in a document, preserving syntax and trivia. Exclude `query Q => observable?`. |
|
|
324
324
|
| `PLAY0563/0564` | Expand a one-line interaction alternative / turn a strict item `where` into one block-form `when`. Individual review, canonical formatting, no pinned evidence; refuse comment loss. Opaque non-item-condition text has no PLAY0564 repair. |
|
|
325
325
|
| `PLAY0614` | Declare Translate direction only when exactly one inbound/outbound interpretation fits public metadata; never change event visibility to make a repair fit. |
|
|
@@ -362,9 +362,12 @@ Requires Screenplay 4.228.0 (`screenplay --version`) for `propose-inline-event`.
|
|
|
362
362
|
`propose-inline-event` is the inverse: it folds a slice-level event with exactly one
|
|
363
363
|
production into an inline event on that production, takes the same `subject`,
|
|
364
364
|
revisions and `formatting: "CanonicalizeTouchedDocuments"`, and preserves executable
|
|
365
|
-
bytes and identities.
|
|
366
|
-
|
|
367
|
-
|
|
365
|
+
bytes and identities. Use it to undo an extraction when the event has one producer and
|
|
366
|
+
no other consumer. It refuses when the fold could change meaning: a conditional
|
|
367
|
+
production (`when`), incomplete mappings, generations, an external origin or public
|
|
368
|
+
event, cross-slice or cross-document use, opaque or handler text, comments that would
|
|
369
|
+
be lost, or any reference other than the single production. Read the refusal and
|
|
370
|
+
leave the event standalone; never work around it with text edits.
|
|
368
371
|
|
|
369
372
|
Requires Screenplay 4.223.0 (`screenplay --version`) for `trace-lineage`.
|
|
370
373
|
|
package/package/corpus/skills/cratis-screenplay-model-authoring/references/property-links.md
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
- Address and query
|
|
9
9
|
- Read evidence, not just a count
|
|
10
10
|
- Propose a property change
|
|
11
|
+
- Remove from an inline event
|
|
11
12
|
- Add with explicit sources and fixtures
|
|
12
13
|
|
|
13
14
|
Property-path evidence in `find-references` and `dependencies` is read-only inspection.
|
|
@@ -140,8 +141,10 @@ with `expectedRevision`, `expectedCatalogRevision`, `action: "rename"|"remove"`,
|
|
|
140
141
|
or `alsoRemove` entries are `{ "target": <handle>, "expectedName": <name> }`.
|
|
141
142
|
Select only intended command, current-event and non-key read-model properties:
|
|
142
143
|
chain membership establishes eligibility, not permission to edit every field.
|
|
143
|
-
Off-chain selections refuse atomically (`HopNotOnChain`). Historical generations,
|
|
144
|
+
Off-chain selections refuse atomically (`HopNotOnChain`). Historical generations,
|
|
144
145
|
keys, opaque or incomplete links and unsupported spans refuse rather than guess.
|
|
146
|
+
Inline events refuse `InlineEventRequiresExtraction` unless the action is `remove`
|
|
147
|
+
with `newGeneration: true` (see [inline events](#remove-from-an-inline-event)).
|
|
145
148
|
|
|
146
149
|
Rename repairs proven references and fixtures. Renaming only a command input
|
|
147
150
|
keeps the event payload name; broken AutoMap links become explicit mappings.
|
|
@@ -175,6 +178,24 @@ have equal revisions. `[]` means no accepted planned event edits, not success;
|
|
|
175
178
|
there is no singular `property.generation`. `deployableWithoutTransformation`
|
|
176
179
|
and `esmVersionKnown` are independent of authoring acceptance.
|
|
177
180
|
|
|
181
|
+
## Remove from an inline event
|
|
182
|
+
|
|
183
|
+
Requires Screenplay 4.232.0 (`screenplay --version`) for inline-event removal;
|
|
184
|
+
older releases refuse inline events.
|
|
185
|
+
|
|
186
|
+
`action: "remove"` with `newGeneration: true` on an inline event extracts it to its
|
|
187
|
+
owning slice in the same proposal (explicit `CanonicalizeTouchedDocuments` consent
|
|
188
|
+
required) and drafts generation N+1 without the member and its mappings. Generation N
|
|
189
|
+
keeps the member; the contract identity and property identities stay. This is how to
|
|
190
|
+
retire a command identifier copied into a stored event payload (`PLAY0469`).
|
|
191
|
+
Without `newGeneration`, an inline event still refuses `InlineEventRequiresExtraction`:
|
|
192
|
+
extract it first with `propose-extract-inline-event`.
|
|
193
|
+
|
|
194
|
+
The report adds `evolutionDraft` (true when any selected event uses `newGeneration`)
|
|
195
|
+
and `extractedInlineEvents` (always an array). An evolution draft is source only: no
|
|
196
|
+
migrator is declared and `deployableWithoutTransformation` stays false. Never present
|
|
197
|
+
it as migration, deployment or replay ready; Chronicle still needs a transformation.
|
|
198
|
+
|
|
178
199
|
## Add with explicit sources and fixtures
|
|
179
200
|
|
|
180
201
|
Read the declaration's original `read-ast` handle. Send `action: "add"`, both
|
|
@@ -19,8 +19,11 @@ from silently changing the reviewed candidate.
|
|
|
19
19
|
new timeline findings; evidence pinning is unsupported for this repair.
|
|
20
20
|
- `PLAY0469` removes an inline identifier payload copy: it **changes the event
|
|
21
21
|
contract**, refuses consumer/opaque impact, has no fix-all, and the catalog does
|
|
22
|
-
not prove events were persisted, so ask about stored contracts first.
|
|
23
|
-
|
|
22
|
+
not prove events were persisted, so ask about stored contracts first. For a
|
|
23
|
+
contract that may have been stored, use `propose-property` `remove` with
|
|
24
|
+
`newGeneration: true` instead: it drafts a new generation (see
|
|
25
|
+
[property planning](property-links.md#remove-from-an-inline-event)).
|
|
26
|
+
The repair itself never drafts a generation.
|
|
24
27
|
- `PLAY0479`: migrate optionality spelling with `PreserveTrivia`; document scope
|
|
25
28
|
migrates all occurrences together. Keep the `query Q => observable?` exception.
|
|
26
29
|
- `PLAY0470` is repaired only from an author-supplied destination intent, never
|
|
@@ -63,7 +63,10 @@ model's behalf.
|
|
|
63
63
|
refused change needs a `then error` spec; each command missing from the table is investigated.
|
|
64
64
|
5. **Lineage and completeness** (phase 3). Backward: every read-model field to an event field,
|
|
65
65
|
`$eventSourceId`, literal or documented derivation, to a command input, `$context`, capture field
|
|
66
|
-
or literal, to the screen, reaction or integration that supplies it.
|
|
66
|
+
or literal, to the screen, reaction or integration that supplies it. Trace a field with the
|
|
67
|
+
`screenplay` MCP server's `trace-lineage` tool (paged tree, breaks, branches and opaque hops
|
|
68
|
+
are reported) rather than stitching `dependencies` calls; confirm each hop in the model.
|
|
69
|
+
Requires Screenplay 4.223.0 (`screenplay --version`); on older releases use `dependencies`. AutoMap fills same-named
|
|
67
70
|
fields silently: count them. Forward: every event to a consumer or a terminal reason; every
|
|
68
71
|
command input to an event field or a rule. Before calling data missing, search the model.
|
|
69
72
|
6. **Phased checklist** (phases 4-10): ownership, event quality, events versus views, rules and
|
|
@@ -173,7 +173,7 @@ Nebulit (`provenance.md`).
|
|
|
173
173
|
| G4 | A command invoked by a reaction is not gated by a caller policy, unless a trusted-path decision is recorded | reactions, `authorize` | D (silent = major) |
|
|
174
174
|
| G5 | Row scoping (whose data) is part of the view, not a filter the caller supplies | queries | D |
|
|
175
175
|
| G6 | Every persona Cannot line resolves to an executable gate (`authorize` policy, or ownership `claim "x" matches subject\|<command property>`, or a Uuid `require <command property> == <protected read path>`) and a `then denied` spec whose caller is synthesized with `given caller as <Persona>` or explicitly carries the effective-gate roles/claims; otherwise recorded as a gap. Persona text is intent only | personas, policies, specs | D |
|
|
176
|
-
| G7 | Every command and query under an inherited module/feature `authorize` has its own `then denied` spec; authorization shared by a feature is declared at feature/module level so new paths inherit it | policies, specs | D |
|
|
176
|
+
| G7 | Every command and query under an inherited module/feature `authorize` has its own `then denied` spec; authorization shared by a feature is declared at feature/module level so new paths inherit it. `require anonymous` is flagged on anything the business did not name public; it must be the whole authorization, preferably in a separate public module, and is not the same as omitting `authorize` | policies, specs | D (major when it exposes another person's data) |
|
|
177
177
|
| G8 | Ownership/claim targets are a supported scalar (text, Uuid, Date or DateTime render; a numeric or Boolean target is always denied; other shapes and a command without exactly one identifier are STAGE-ESM-015): noted | policies | C (renderable mode) |
|
|
178
178
|
|
|
179
179
|
## Phase 10. Views, queries and screens (4 checks, H1-H4)
|
|
@@ -77,6 +77,11 @@ query ListInvoices => InvoiceListReadModel[]
|
|
|
77
77
|
authorize IsAuthenticated
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
+
A deliberately public query (no identity needed) uses a policy with `require anonymous`
|
|
81
|
+
as its whole authorization, ideally in a separate public module; leaving `authorize` off
|
|
82
|
+
is not the same thing. Rules and diagnostics:
|
|
83
|
+
[anonymous policy](../cratis-screenplay-command-surface/references/policy-persona-seed.md#anonymous-policy).
|
|
84
|
+
|
|
80
85
|
**Name the compiler and renderer.** Optional keyed queries and collection queries
|
|
81
86
|
bind, including `observable`. Caller-supplied equality
|
|
82
87
|
filters on collections bind as ESM v14; `from`, single-result filters, `scoped to`,
|
|
@@ -305,7 +310,7 @@ binding failures are errors.
|
|
|
305
310
|
- [ ] `observable` is present exactly where the caller should see changes without
|
|
306
311
|
asking again.
|
|
307
312
|
- [ ] Every authorized query has a specification with `given caller`, including a
|
|
308
|
-
`then denied` case.
|
|
313
|
+
`then denied` case (a query authorized only by an anonymous policy may omit `given caller`).
|
|
309
314
|
- [ ] Each read model has exactly one builder and every field traces to an event.
|
|
310
315
|
- [ ] A reducer-built view's `by` type matches its events' event-source identity (`PLAY0690`).
|
|
311
316
|
- [ ] No screen reference is left ambiguous or unresolved.
|
|
@@ -54,6 +54,10 @@ The complete model with these specifications is in read-surface `references/name
|
|
|
54
54
|
|
|
55
55
|
## Parse and binding diagnostics
|
|
56
56
|
|
|
57
|
+
A command or query authorized only by an anonymous policy may omit `given caller`;
|
|
58
|
+
every other authorized specification needs one (PLAY0389). See
|
|
59
|
+
[anonymous policy](../../cratis-screenplay-command-surface/references/policy-persona-seed.md#anonymous-policy).
|
|
60
|
+
|
|
57
61
|
PLAY0358 is a syntax error; PLAY0388 also occurs at parse time for extra text
|
|
58
62
|
after `then denied`. PLAY0350, PLAY0352, PLAY0388 for mixed outcomes, PLAY0389 and
|
|
59
63
|
the one-rejection rule PLAY0273 occur only at binding. Source validation alone
|
|
@@ -100,7 +100,9 @@ Unattended work takes the conservative option and marks it `ASSUMED` in model
|
|
|
100
100
|
## Rules
|
|
101
101
|
**Compiler contracts** (diagnostics; capability per tool in the toolchain `references/executable-subset.md`)
|
|
102
102
|
- `identifier` on an event property is PLAY0019; the source id is never payload by declaration.
|
|
103
|
-
Copying it as a payload value is PLAY0469 (information, warning for inline events)
|
|
103
|
+
Copying it as a payload value is PLAY0469 (information, warning for inline events);
|
|
104
|
+
for a possibly stored contract, retire it as an evolution draft with `propose-property`
|
|
105
|
+
`remove` + `newGeneration: true`, not by editing the event in place (model-authoring [property planning](../cratis-screenplay-model-authoring/references/property-links.md#remove-from-an-inline-event)).
|
|
104
106
|
- In the executable model a production's `for` must resolve to the command's scalar identifier:
|
|
105
107
|
one command writes one stream declaratively; described handlers bind v23 but
|
|
106
108
|
their payload-only contract does not grant arbitrary destinations.
|
package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
4.
|
|
1
|
+
4.232.0
|