@cratis/pi 7.22.0 → 7.24.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 (105) hide show
  1. package/package/corpus/skills/cratis-application-slice-conformance/SKILL.md +1 -1
  2. package/package/corpus/skills/cratis-application-slice-conformance/references/contract-and-precedence.md +5 -5
  3. package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +13 -4
  4. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +3 -3
  5. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/cases-to-specify.md +1 -1
  6. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +1 -1
  7. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/integration-contracts.md +1 -1
  8. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +5 -3
  9. package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translation-patterns.md +1 -1
  10. package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +4 -3
  11. package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +37 -36
  12. package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +154 -0
  13. package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +48 -0
  14. package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +1 -1
  15. package/package/corpus/skills/cratis-screenplay-command-surface/verification.json +6 -0
  16. package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +16 -8
  17. package/package/corpus/skills/cratis-screenplay-discovery/references/event-naming.md +1 -1
  18. package/package/corpus/skills/cratis-screenplay-discovery/references/facilitation.md +5 -4
  19. package/package/corpus/skills/cratis-screenplay-discovery/references/human-workshop.md +1 -1
  20. package/package/corpus/skills/cratis-screenplay-discovery/references/interview-questions.md +2 -2
  21. package/package/corpus/skills/cratis-screenplay-discovery/references/personas-and-causes.md +7 -4
  22. package/package/corpus/skills/cratis-screenplay-discovery/references/plotting-and-handoff.md +8 -7
  23. package/package/corpus/skills/cratis-screenplay-discovery/references/storming-loop.md +2 -2
  24. package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +13 -3
  25. package/package/corpus/skills/cratis-screenplay-event-modeling/references/naming-primitives.md +5 -3
  26. package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +1 -2
  27. package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +3 -1
  28. package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +11 -3
  29. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/loss-report-template.md +1 -1
  30. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md +4 -4
  31. package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/signal-to-intent.md +1 -1
  32. package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +10 -6
  33. package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +33 -6
  34. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +28 -6
  35. package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +108 -9
  36. package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +1 -1
  37. package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +23 -7
  38. package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +1 -1
  39. package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +11 -10
  40. package/package/corpus/skills/cratis-screenplay-model-review/references/report-template.md +5 -1
  41. package/package/corpus/skills/cratis-screenplay-model-review/verification.json +1 -1
  42. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +5 -5
  43. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/completeness-self-check.md +1 -1
  44. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/opt-in.md +7 -5
  45. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/phases.md +4 -4
  46. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/provenance.md +1 -1
  47. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/reasoning-notes.md +24 -19
  48. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/stop-or-assume.md +1 -1
  49. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/verdicts-and-modes.md +5 -3
  50. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +1 -1
  51. package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/worked-example.md +15 -9
  52. package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +11 -1
  53. package/package/corpus/skills/cratis-screenplay-read-surface/references/guarded-actions.md +4 -0
  54. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +7 -6
  55. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/drift-and-ledger.md +1 -1
  56. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +3 -3
  57. package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +1 -1
  58. package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +25 -9
  59. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/coverage-matrix.md +1 -1
  60. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +5 -0
  61. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-catalogue.md +7 -4
  62. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md +1 -1
  63. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-workshop.md +1 -1
  64. package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +1 -1
  65. package/package/corpus/skills/cratis-screenplay-scenario-coverage/verification.json +1 -1
  66. package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +22 -8
  67. package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +6 -4
  68. package/package/corpus/skills/cratis-screenplay-slice-design/references/field-lineage.md +2 -2
  69. package/package/corpus/skills/cratis-screenplay-slice-design/references/model-reasoning.md +87 -0
  70. package/package/corpus/skills/cratis-screenplay-slice-design/references/provenance.md +1 -1
  71. package/package/corpus/skills/cratis-screenplay-slice-design/references/read-model-design.md +2 -2
  72. package/package/corpus/skills/cratis-screenplay-slice-design/references/review-questions.md +2 -1
  73. package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +12 -11
  74. package/package/corpus/skills/cratis-screenplay-slice-design/references/slicing.md +3 -3
  75. package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +9 -3
  76. package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +23 -6
  77. package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +67 -1
  78. package/package/corpus/skills/cratis-screenplay-specifications/references/persona-callers-and-cases.md +117 -0
  79. package/package/corpus/skills/cratis-screenplay-specifications/verification.json +1 -1
  80. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +32 -17
  81. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +3 -3
  82. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/chronicle-boundaries.md +11 -6
  83. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +24 -11
  84. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/evolution.md +2 -2
  85. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +9 -0
  86. package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +3 -3
  87. package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +12 -5
  88. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +2 -2
  89. package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +12 -1
  90. package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +124 -5
  91. package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +8 -1
  92. package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +19 -4
  93. package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +7 -1
  94. package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +22 -4
  95. package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +21 -0
  96. package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +22 -5
  97. package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +7 -6
  98. package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +20 -3
  99. package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +6 -0
  100. package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +4 -2
  101. package/package/corpus/skills/cratis-screenplay-ui-composition/references/guarded-interactions.md +71 -0
  102. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +7 -4
  103. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +17 -6
  104. package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +1 -1
  105. package/package.json +1 -1
@@ -5,6 +5,7 @@
5
5
  - Admission
6
6
  - Declare and route
7
7
  - Specification routes
8
+ - Canonical keys and evolution
8
9
  - Boundaries
9
10
 
10
11
  ## Admission
@@ -82,6 +83,26 @@ Typed event examples may supply a route, replaced as a whole by step overrides;
82
83
  `for` is independent. No spelling restores a wildcard after an example supplies
83
84
  a route. See `cratis-screenplay-specifications` for fixture provenance.
84
85
 
86
+ ## Canonical keys and evolution
87
+
88
+ At Screenplay 4.127.0, stream-id literals on command routes (PLAY0504) and
89
+ specification routes (PLAY0549) must be nonempty, well-formed Unicode NFC text;
90
+ invalid text is refused, never normalized. In Double numeric mode integer ids
91
+ are within ±(2^53−1); Exact mode has no such bound but still refuses binding.
92
+ Known routed command identifiers and production destination types must equal
93
+ the source's nominal identifier type (PLAY0504 is an error, not a warning).
94
+ Allocation is typed by the generated identifier, or without one requires a
95
+ UUID-based source. Unrouted commands are unaffected.
96
+
97
+ Composite schemas declare `streamId` with at least two named scalar parts.
98
+ Command routes map every part once; specification parts are literals only.
99
+ Format each part by the portable scalar rules, escape `%` to `%25` and `|` to
100
+ `%7C`, then join with `|` in declaration order; decoding is strict. Specification
101
+ route contradictions compare canonical values part by part (UUID case variants
102
+ are equal). Changing a stored stream's key schema needs a new stream identity
103
+ or migration. Keep hand-joined legacy ids as scalar text: never split by guesswork.
104
+ Authority: v4.127.0 `event-sources.md`, `diagnostics.md`, decision 0033.
105
+
85
106
  ## Boundaries
86
107
 
87
108
  Reference routing does not prove target deployment, concurrency or protected
@@ -1,6 +1,6 @@
1
1
  # Traps (one line each, with the fix)
2
2
 
3
- Current pins: Screenplay 4.125.0 / CLI 3.41.0 (`versions.md`). Unless explicitly
3
+ Current pins: Screenplay 4.127.0 / CLI 3.41.0 (`versions.md`). Unless explicitly
4
4
  updated below, [probed]/[source] rows retain their historical v4.66.0/CLI 3.28.2
5
5
  scope; negative capability claims there are not current verdicts. Current routes
6
6
  bind as v8, v7 reaches Stage planning, reference tests have CLI/MCP routes, and
@@ -29,7 +29,7 @@ exact numbers are documented in the grammar. Compiler syntax: `cheat-sheet.md`.
29
29
  21. Quoted `import "x/*.play"` = my files; unquoted `import Ctx.Event` = another context's contract (does not bind: PLAY0268). [probed]
30
30
  22. Construct keywords are closed (`aggregate`, `saga`, `workflow` do not exist): PLAY0029 or PLAY0001/0022/0024.
31
31
  23. `@` escapes are mandatory for `tag`, `authorize`, `produces`, `reads`, `file`, `validate`, `sequence`, `occurred`, `causedBy`, `namespace`, `correlation`, `causation`, and projection `key`/`parent`/`with` as names.
32
- 24. Comments do not survive canonicalizing edits (PLAY0288 reprint; `droppedCommentCount`); keep durable rationale in `description` text, not `//`.
32
+ 24. Canonicalizing edits can drop unplaceable comments (PLAY0288; inspect `droppedCommentCount`); keep durable rationale in fenced Markdown `documentation`, not `//`, and summaries in `description`. Documentation survives canonical printing but changes neither executable bytes nor `modelRevision`; it is not rendered code.
33
33
  25. MCP writes: propose, review, approval, apply by the identity owner (the session that owns the MCP connection); other subagents return edit requests; proposals are connection-local, at most 16 (`cratis-screenplay-model-authoring`).
34
34
  26. Operations/systems and exact numbers remain unadmitted. Sources/streams/routes bind and reference-execute as ESM v8 at 4.125.0; generated values/responses bind as v7. CLI 3.41.0 renders through v7 only, with construct-specific Stage refusals. Consult released grammar rather than inventing syntax from decisions.
35
35
  27. Translate vs Automation is semantic: external facts become local facts in `Translate`; in-app event-to-event goes in `Automation`.
@@ -43,8 +43,25 @@ exact numbers are documented in the grammar. Compiler syntax: `cheat-sheet.md`.
43
43
  34. A `from <Event> key <property>` routes only if every such event carries that property: an event that frees or updates a row keyed by another stream's id must carry that id in its payload, or the row never changes. Whether the compiler reports a missing key property is unverified [to probe]; check by hand.
44
44
  35. `description`/`documentation` are authoring metadata: board, MCP and Prologue show them; `cratis render` never does (Stage#178). A rule only in prose is unenforced in rendered code; make it a rule layer, a spec or a recorded target requirement.
45
45
  36. One unadmitted construct (operations, exact numbers, refusal/redelivery) blocks whole-model binding. Routing is admitted v8, not one of those constructs; CLI render's v7 boundary is a separate refusal. Do not remove routing or authorization to render a model.
46
- 37. Personas are not in the ESM (Screenplay#254); specs cannot reference them. Write `given caller` as the roles/claims that stand for the persona.
47
- 38. A rule that depends on stored state is `reads <View>` + `require <expr> message "..."` (stated intent; PLAY0268/0271 at binding are expected in design mode). The slice `description` must mark it NOT enforced in the model today (Screenplay#129/#209) and name the target: Arc `[ProtectedDecision]` + `DecisionRead<T>` (Arc v22.39.0 and later; not available in a Stage-rendered app on Arc 22.25.0), Chronicle DCB (`concurrency` scope), or a constraint where one fits. Forbidden: caller-supplied copies of state in `require`, boolean attestation inputs (`confirmsX == true`), rules hidden in `handler`/implementation-hint prose. An unguarded materialized read is unsafe for a protected decision.
46
+ 37. Personas remain outside ESM bytes, but 4.127.0 specifications accept `given caller as <Persona>`: one authenticated deterministic policy witness, not every matching caller. Inspect the chosen `or` branch; use explicit callers when synthesis is refused.
47
+ 38. A rule that depends on stored state is `reads <View>` + `require <expr> message "..."` (stated intent; PLAY0268/0271 at binding are expected in design mode). The slice `description` must mark it NOT enforced in the model today (Screenplay#129/#209) and name the target: Arc `[ProtectedDecision]` + `DecisionRead<T>` (Arc v22.39.0 and later; available to gap-fill on Stage 4.51.3's Arc 22.50.5/Chronicle 19.32.0, not emitted protection), Chronicle DCB (`concurrency` scope), or a constraint where one fits. Forbidden: caller-supplied copies of state in `require`, boolean attestation inputs (`confirmsX == true`), rules hidden in `handler`/implementation-hint prose. An unguarded materialized read is unsafe for a protected decision.
48
+
49
+ Current identity/compliance traps (v4.127.0 `identity.md`, `concepts.md`, `events.md`,
50
+ `purposes.md`, `diagnostics.md`):
51
+ - `$identity` built-ins alias `$context.identity`; declared detail reads are PLAY0268,
52
+ while an identity block alone does not block readiness. `scoped to` is opaque,
53
+ not a detail reference. Query sources need keyed single compatible results and
54
+ token-only keys/gates that do not depend on details.
55
+ - `pii personal` repeats one marker (PLAY0653). Legacy markers are accepted but
56
+ deprecated (PLAY0565); repairs preserve notes, never invent legal content.
57
+ - Event `subject` is report-only (PLAY0270), not emitted C# `[Subject]` or runtime
58
+ lineage. Keep stream identity, data subject, encryption scope and policy subject apart.
59
+ - Purpose metadata/checks/records declare processing, not lawfulness or retention.
60
+ - PLAY0504 is an error; stream-id text is nonempty well-formed NFC (refuse, never
61
+ normalize), Double integer ids are within ±(2^53−1); canonical UUID comparison
62
+ ignores case. Protected concepts cannot be stream ids/parts/mapping sources (PLAY0515).
63
+ - Run `--check privilege` on elevated event-trigger paths; opaque producers are
64
+ unknown, not safe. Arc needs `[ExecuteCommandsAsSystem]` to supply a principal.
48
65
 
49
66
  The SKILL.md top 12: 1, 4, 5, 6, 7, 10, 12, 13, 17, 18, 20, 21 (+ mode/version notes there). Traps 39 to 44 are tool traps added at the 4.66.0 pin.
50
67
  39. A handler never binds: PLAY0268 "Command '<n>' handler requires a constrained implementation attachment", with a file, a fence, `implementation` or `hint` alike. `implementation` and `hint` are accepted on a command handler, an operation execute/compensate phase and (from 4.65.0) a command property named rule, and are rejected on concept rules, built-in property rules and whole-command `require`/`validate` bodies; on a handler they are authoring intent only (no execution, lock or confirmation). A handler slice is gap-fill, not a customization of a rendered slice. [source, probed]
@@ -52,4 +69,4 @@ The SKILL.md top 12: 1, 4, 5, 6, 7, 10, 12, 13, 17, 18, 20, 21 (+ mode/version n
52
69
  41. MCP roots bug (4.63.1 and earlier, including the 4.60.1 bundled by cratis before 3.28.2; not present in 4.66.0 or cratis 3.28.2, probed): a dynamic-root server answers the roots request with an `id: null` error right after `notifications/initialized`; hosts treat it as fatal. `open-workspace.path` does not help. Start with a fixed root (`screenplay mcp <folder>`, `cratis screenplay mcp` in a project with `.cratis/ai.json`) or use 4.63.2 or later (cratis 3.28.2 or later). [source, probed]
53
70
  42. A symlinked model path is refused by the MCP server (macOS `/tmp` is a symlink); pass the physical path. Proposals are connection-local (at most 16); `apply` persists identities to `.screenplay/identities.json` and is not crash-atomic across files; never retry `apply` after `ApplyOutcomeUnknown`. [source]
54
71
  43. `modelRevision` is canonical semantic (line positions and descriptions do not change it; a file move only if it changes logical placement or application identity) and, without `identities.json`, changes with the root folder name; it is not comparable with a render's `semanticRevision`. Source identity for verdicts is the commit plus the digest from the source-identity helper (`cratis-screenplay-modeling-lifecycle` `references/verdicts-and-modes.md` "Source identity"). [probed]
55
- 44. `cratis render` neither builds nor tests; `--name` is required for plain source; `.cratis-render/` is control state and is never staged; Stage-rendered apps are on Arc 22.25.0 (no `[ProtectedDecision]`). `cratis` file mode versus folder mode (trap 6) and a stale `cratis` on `PATH` (`which -a cratis`) both silently change what a verdict means. [source]
72
+ 44. `cratis render` neither builds nor tests; `--name` is required for plain source; `.cratis-render/` is control state and is never staged; Stage 4.51.3 rendered apps pin Arc 22.50.5/Chronicle 19.32.0 (`[ProtectedDecision]` available to gap-fill, not automatically emitted). `cratis` file mode versus folder mode (trap 6) and a stale `cratis` on `PATH` (`which -a cratis`) both silently change what a verdict means. [source]
@@ -28,7 +28,7 @@ V3 are read from the MCP server or from a render, V1 and V5 from the CLIs.
28
28
 
29
29
  | Tool | Command | Pass | Fail |
30
30
  | --- | --- | --- | --- |
31
- | Standalone 4.125.0 (preferred) | `screenplay <model-root> --warnaserror --no-color` | exit 0 and a nonzero compiled file count | exit 1 defects; exit 2 could not run/invalid arguments or input |
31
+ | Standalone 4.127.0 (preferred) | `screenplay <model-root> --warnaserror --no-color` | exit 0 and a nonzero compiled file count | exit 1 defects; exit 2 could not run/invalid arguments or input |
32
32
  | cratis (fallback) | `cratis screenplay validate <model-folder> --warnings-as-errors -o json-compact` | exit 0 | exit 5; exit 1 means missing path or no files |
33
33
 
34
34
  - Validate the complete application root, not an independently selected fragment.
@@ -40,7 +40,8 @@ V3 are read from the MCP server or from a render, V1 and V5 from the CLIs.
40
40
  Exit/`--warnaserror` apply to that reported set; inspect the separate whole
41
41
  application counts before a whole-model claim. Unknown/ambiguous scopes exit 2.
42
42
  - `--check <names>` (repeatable) or `--check all` opts into completeness warnings
43
- PLAY0530–PLAY0537. Whole-source errors skip them; a skipped check is not passed.
43
+ including PLAY0530–PLAY0537, purposes (PLAY0602–0606) and privilege (PLAY0652).
44
+ Whole-source errors skip them; a skipped check is not passed.
44
45
  Names/codes, coverage limits and editor support: `diagnostics.md`.
45
46
  - Warnings are failures here. PLAY0029 (a construct dropped silently) and the unresolved-name
46
47
  warnings are the defects this verdict exists to catch.
@@ -62,7 +63,7 @@ MCP reports `V2 not run: no MCP in this agent` unless the brief supplies fresh o
62
63
  source revision).
63
64
  4. Report the codes with counts, blocking (error severity) apart from informational. A list
64
65
  with blocking entries is a valid V2 result (`V2 read: 6 blocking, PLAY0268 x3 list query,
65
- @pii ...`); it is the evidence for a "V3 blocked" report. The view also lists
66
+ pii ...`); it is the evidence for a "V3 blocked" report. The view also lists
66
67
  information-severity diagnostics (PLAY0269 deferred UI, PLAY0270 authoring metadata such as
67
68
  descriptions, personas and screens) on models that bind; they do not block.
68
69
 
@@ -79,9 +80,9 @@ comparison needs it). Binding is what makes a model renderable at all. V3 means
79
80
  never "specifications pass".
80
81
 
81
82
  - Report the ESM version the model needs: `V3 ready (screenplay 4.68.0, ESM v6)`,
82
- `V3 blocked: PLAY0268 x3 (list query, @pii) - design scope kept`.
83
- - A blocked V3 is not repaired by deleting protection or domain rules. Never remove `@pii`,
84
- `@sensitive`, authorization, list queries, automations or rules to reach V3; record the
83
+ `V3 blocked: PLAY0268 x3 (list query, pii) - design scope kept`.
84
+ - A blocked V3 is not repaired by deleting protection or domain rules. Never remove `pii`,
85
+ `secret`, authorization, list queries, automations or rules to reach V3; record the
85
86
  slice and the code in the gap list.
86
87
  - A model is executable only on the compiler that bound it. V3 does not carry
87
88
  to render admission: CLI 3.41.0 passes up to ESM v7 to Stage, refuses newer
@@ -17,12 +17,13 @@ probe; older probes retain their original labels in the other references.
17
17
 
18
18
  | Source | Pin | Evidence |
19
19
  | --- | --- | --- |
20
- | Screenplay language, standalone tool and MCP | **4.125.0** (`4d818eb`) | Released tag `v4.125.0`; installed `screenplay --version` and `--help` |
20
+ | Screenplay language, standalone tool and MCP | **4.127.0** (`e70435a4`) | Released tag `v4.127.0`; installed `screenplay --version`; changed identity/compliance examples compiled |
21
21
  | cratis CLI | **3.41.0** | Released tag `v3.41.0`; installed `cratis --version` |
22
22
  | Screenplay bundled by CLI | **4.114.0** | CLI `v3.41.0:Directory.Packages.props` |
23
23
  | Stage bundled by CLI | **4.51.3** | Same file; the CLI's runtime image follows its Stage package version |
24
24
  | Cratis.Arc.Screenplay bundled by CLI | **22.54.0** | Same file; this is the generator package, not a blanket rendered-app dependency pin |
25
25
  | Chronicle / Fundamentals bundled by CLI | **19.32.0 / 7.22.8** | Same file |
26
+ | Stage 4.51.3 rendered backend | **Arc 22.50.5 / Chronicle 19.32.0** | Stage `v4.51.3:Source/Rendering.Cratis/Scaffolding/CratisBackendApplicationScaffoldProfile.cs`; client/testing/image match; scaffold disables embedded reverse extraction |
26
27
 
27
28
  Check the actual executable before relying on this table: `screenplay --version`,
28
29
  `cratis --version`, MCP `initialize` → `serverInfo.version`. An older executable
@@ -30,7 +31,7 @@ on PATH can shadow a newer install; inspect `which -a cratis`.
30
31
 
31
32
  ## Two compilers, one rule
32
33
 
33
- Standalone Screenplay 4.125.0 and the CLI's 4.114.0 bundle are different releases.
34
+ Standalone Screenplay 4.127.0 and the CLI's 4.114.0 bundle are different releases.
34
35
  Prefer standalone for the current language checks; CLI owns generation, Prologue
35
36
  and rendering. Name the tool/version with every verdict. No verdict transfers
36
37
  between differing compilers without checking the same inputs there.
@@ -62,7 +63,7 @@ for identity-stable selection.
62
63
 
63
64
  ## Admission boundaries
64
65
 
65
- Screenplay `v4.125.0:Source/DotNET/Screenplay/Semantics/Versions.cs` supports schema
66
+ Screenplay `v4.127.0:Source/DotNET/Screenplay/Semantics/Versions.cs` supports schema
66
67
  pairs through v10. Generated values/responses and policy negation select v7;
67
68
  sources/streams and command/specification routes select v8; reaction
68
69
  `runs as system [role "<Role>"]` selects v10 and reference-executes on 4.125.0.
@@ -86,6 +87,22 @@ The renderable-subset and Stage references retain older probes explicitly;
86
87
  read them as tested snapshots, not as a claim that Stage 4.51.3 shares every
87
88
  4.24.2 limitation. Query the actual bundled renderer before a V5 claim.
88
89
 
90
+ At 4.127.0, `$identity` aliases built-in caller paths; declared identity details
91
+ remain metadata and their executable reads report PLAY0268. Bare `pii`/`secret`
92
+ still block binding; `personal` aliases `pii`. Legacy markers are accepted with
93
+ PLAY0565 information, duplicates warn PLAY0653. Event `subject` and processing
94
+ purposes are report-only metadata (PLAY0270); purpose checks/reports do not prove
95
+ lawfulness or enforce retention. See command-surface context/compliance references.
96
+
97
+ Authoring features source-checked in standalone 4.127.0: `propose-source`,
98
+ `find-specification-obligations`, `find-modeling-smells`, specification descriptions,
99
+ container/command/read-model/reaction documentation, routed redelivery locators,
100
+ guarded item interactions, persona callers and named case tables. Discover schemas
101
+ in the older CLI bundle rather than assuming parity. Cases/persona callers expand
102
+ to ordinary ESM; metadata changes no executable bytes. Redelivery remains
103
+ unadmitted even when its route is valid. Details: model-authoring MCP references,
104
+ specifications, UI composition and `diagnostics.md`.
105
+
89
106
  ## Historical probes
90
107
 
91
108
  - Screenplay 4.68.0 admitted v7; CLI 3.28.2/3.28.3 bundled 4.66.0 (v6 at most),
@@ -3,6 +3,12 @@
3
3
  "input": "Check a Screenplay model folder: which compiler should I run, what do V1 to V3 mean, and what does the cratis CLI do with my Automation slice?",
4
4
  "fixtures": [],
5
5
  "assertions": [
6
+ { "kind": "skill-contains", "value": "4.127.0" },
7
+ { "kind": "skill-contains", "value": "PLAY0653", "file": "references/diagnostics.md" },
8
+ { "kind": "skill-contains", "value": "PLAY0646", "file": "references/diagnostics.md" },
9
+ { "kind": "skill-contains", "value": "PLAY0595", "file": "references/diagnostics.md" },
10
+ { "kind": "skill-contains", "value": "PLAY0652", "file": "references/diagnostics.md" },
11
+ { "kind": "skill-contains", "value": "PLAY0504 | E", "file": "references/diagnostics.md" },
6
12
  { "kind": "skill-contains", "value": "references/versions.md" },
7
13
  { "kind": "skill-contains", "value": "PLAY0029" },
8
14
  { "kind": "skill-contains", "value": "--warnaserror" },
@@ -240,8 +240,10 @@ acts. Three words carry it:
240
240
  | **Action** | a closed set: `execute`, `navigate to`/`navigate back`, `open dialog`/`close dialog`, `refresh`, `set … to`, `notify`, `confirm`, `raise` |
241
241
  | **Behavior** | a bundle of trigger-to-action bindings; inline (`on …`) or named (`behavior` + `uses`) |
242
242
 
243
- A complete example — a named behavior with parameters, attached with `uses`, and
244
- an inline `on` block with a continuation:
243
+ Guarded alternatives and `where` deprecation:
244
+ [guarded interactions](references/guarded-interactions.md).
245
+
246
+ Complete named/inline behavior example:
245
247
 
246
248
  ```screenplay
247
249
  concept InvoiceId : Uuid
@@ -0,0 +1,71 @@
1
+ <!-- Copyright (c) Cratis. All rights reserved. -->
2
+ <!-- Licensed under the MIT license. See LICENSE file in the project root for full license information. -->
3
+
4
+ # Choose a gesture's whole action list
5
+
6
+ `on click`, `on double click` and `on select` accept ordered block-form `when`
7
+ alternatives and an optional final `otherwise`. Use the same strict condition
8
+ language and data-item subject as [guarded screen actions](../../cratis-screenplay-read-surface/references/guarded-actions.md):
9
+ `item.<path>` compared with a literal, joined by `and`, `or` and parentheses.
10
+ At least one `when` and a nonempty action list in every branch are required.
11
+ Do not mix alternatives with plain actions or `where`; a one-line
12
+ `when … execute …` belongs to labeled actions, not interactions.
13
+
14
+ This complete model validates on standalone Screenplay 4.127.0:
15
+
16
+ ```screenplay
17
+ module Billing
18
+ feature Invoices
19
+ slice StateView InvoiceHistory
20
+ event InvoiceRecorded
21
+ status String
22
+ readmodel InvoiceView
23
+ invoiceId String
24
+ status String
25
+ projection Invoices => InvoiceView
26
+ from InvoiceRecorded
27
+ invoiceId = $eventSourceId
28
+ status = status
29
+ query InvoiceById => InvoiceView optional
30
+ by invoiceId String
31
+ screen InvoiceDetails
32
+ data InvoiceView via query InvoiceById by invoiceId
33
+ table InvoiceView
34
+ column status
35
+ on double click
36
+ when item.status == "draft"
37
+ notify info "The draft can be edited"
38
+ refresh InvoiceById
39
+ otherwise
40
+ notify info "Only drafts can be edited"
41
+ ```
42
+
43
+ The first matching branch runs once on the rendered item at gesture time, without
44
+ refetch or re-evaluation while its list runs. No match uses fallback or does
45
+ nothing; **no subject does nothing, including fallback**. Failure, denial or an
46
+ unavailable command never falls through; backend commands retain their rules.
47
+ Unlike labeled actions, no choice was displayed beforehand to refresh at click.
48
+
49
+ A table click/double click uses the activated row; select uses the newly selected
50
+ item, and clearing selection runs nothing. Elsewhere use the nearest enclosing
51
+ single item or selected row, with guarded actions' sibling precedence. Check named
52
+ behaviors at each `uses` site. Component `context` or `selectedItem` bindings do
53
+ not supply the subject in this version; unresolved/equally near subjects report
54
+ PLAY0346.
55
+
56
+ Submit, event, change, interval and application triggers have no alternatives.
57
+ The one-line `on row-click navigate to … by …` remains unchanged. Opaque `where`
58
+ on click/double click/select is deprecated (PLAY0564): strict item conditions warn
59
+ and C# offers a typed repair to one `when` with no fallback; other guard text is
60
+ Information without repair. Other triggers' `where` remains unchanged. Repairs
61
+ require individual review, canonical formatting, preserve comments and refuse
62
+ comment loss; TypeScript diagnoses but offers no repair. PLAY0563 has a C# repair
63
+ expanding a one-line alternative to the block form. Neither repair supports
64
+ pinned evidence.
65
+
66
+ UI is deferred from backend ESM (PLAY0269), not executable gesture proof. The
67
+ board draws a static prototype; renderers must explicitly admit alternatives or
68
+ report unsupported, never flatten them into plain actions.
69
+
70
+ Authority: Screenplay v4.127.0 `interactions.md`, `diagnostics.md`,
71
+ `mcp/authoring-tools.md`; decision 0048.
@@ -52,8 +52,11 @@ Everything below was read at those tags (`Source/Rendering.Cratis/**`, `README.m
52
52
  [references/render-example.md](references/render-example.md) was rendered, built and
53
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,
54
54
  Chronicle 19.32.0 and the tool split) is in the `cratis-screenplay-toolchain` skill,
55
- `references/versions.md`. Rendered apps are on Arc `22.25.0`, so `[ProtectedDecision]`
56
- (Arc 22.39.0 and later) is not available in code written into one. Screen render
55
+ `references/versions.md`. Stage 4.51.3 scaffolds Arc `22.50.5` and Chronicle
56
+ `19.32.0`, with `CratisEmbeddedScreenplayEnabled=false`. `[ProtectedDecision]` and
57
+ `DecisionRead<T>` are available to gap-fill code, not automatically emitted or
58
+ protected by Stage; admission and unit-of-work enrollment still matter. See
59
+ [rendered application](references/rendered-application.md) for the source checks. Screen render
57
60
  publication and browser behavior for the canonical corpus are verified on public
58
61
  CLI 3.40.7 / `cratis/stage:4.51.1`. Studio 0.141 is released and production runs
59
62
  v0.139.0 or later, but production UI automation is pending a
@@ -68,7 +71,7 @@ The `.play` model is the source of truth; Stage-managed output is derived from i
68
71
  - Hand-written code goes in `Customizations/` (unmanaged), in a separate project, or in
69
72
  an explicitly authorized gap-fill for scope Stage cannot render (`cratis-screenplay-render-and-gap-fill`).
70
73
  - A customization never makes a rejected model renderable, and never weakens modeled
71
- authorization, validation or `@pii` to get past a refusal.
74
+ authorization, validation or personal-data and secret markers to get past a refusal.
72
75
  - Never claim a whole-application result from a subset of the model.
73
76
 
74
77
  ## Publication and recovery
@@ -135,7 +138,7 @@ Facts that surprise:
135
138
 
136
139
  ## Historical Stage 4.24 admission
137
140
 
138
- Current pins are standalone Screenplay 4.125.0 / CLI 3.41.0 / Stage 4.51.3.
141
+ Current pins are standalone Screenplay 4.127.0 / CLI 3.41.0 / Stage 4.51.3.
139
142
  Routes bind/reference-execute as v8; reaction `runs as` identity as v10.
140
143
  CLI renders through v7 only (CLI-RENDER-004 for newer model versions) and its
141
144
  older 4.114.0 parser rejects `runs as` (PLAY0137). Stage 4.51.3's direct planner
@@ -7,18 +7,29 @@ render (see [render-example.md](render-example.md)).
7
7
 
8
8
  ## Scaffold pins
9
9
 
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.
14
+
10
15
  | Item | Value |
11
16
  | --- | --- |
12
17
  | Target framework | .NET 10 (`net10.0`), `Microsoft.NET.Sdk.Web` |
13
- | Arc packages (`Cratis`, `Cratis.Arc.MongoDB`, Arc testing) | `22.25.0` |
14
- | Chronicle client | `Cratis.Chronicle` and `.AspNetCore` `19.8.1`, matched to the `cratis/chronicle:19.8.1-development` image in the compose file |
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 |
20
+ | Embedded reverse extraction | `CratisEmbeddedScreenplayEnabled=false`: the source `.play` is authoritative |
15
21
  | Test packages | xunit, NSubstitute, Cratis.Specifications; **Debug configuration only** (`IsTestProject` when Debug) |
16
- | Frontend | Vite and React, Components `4.14.0`, Scene `4.2.0`, Fundamentals `7.19.6` |
22
+ | Frontend | Vite and React, Components `4.14.0`, Scene `4.10.0`, Fundamentals `7.19.8` |
17
23
  | Package management | central package management **off**; `Directory.Packages.props` is managed, do not edit it |
18
24
 
19
- Consequences: `[ProtectedDecision]` and `DecisionRead<T>` (Arc 22.39.0 and later) are not
20
- available in a rendered application; `[ExecuteCommandsAsSystem]` (Arc 20.56.0 and later)
21
- is. Upgrading Arc or Chronicle inside a rendered application is a re-render under a newer
25
+ Consequences: `[ProtectedDecision]` (`Cratis.Arc.Chronicle.ReadModels`) and
26
+ `DecisionRead<T>` / `IDecisionReads` (`Cratis.Chronicle.ReadModels`) are available
27
+ in this scaffold's package set, as is `[ExecuteCommandsAsSystem]`. This is API
28
+ availability, not Stage emission or runtime protection: gap-fill must opt into
29
+ 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`.
32
+ 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
22
33
  Stage, not an edit of the managed files. The compose file binds local ports `27017` and
23
34
  `35000`, keeps data in the named volumes `chronicle-data` and `chronicle-config`, and
24
35
  `docker compose down --volumes` is the only thing that deletes them.
@@ -10,7 +10,7 @@
10
10
  { "kind": "skill-contains", "value": "means stop and reconcile" },
11
11
  { "kind": "skill-contains", "value": "STAGE-ESM-016" },
12
12
  { "kind": "skill-contains", "value": "**Render never builds, tests or runs**" },
13
- { "kind": "skill-contains", "value": "Arc `22.25.0`" },
13
+ { "kind": "skill-contains", "value": "Arc `22.50.5`" },
14
14
  { "kind": "skill-contains", "value": "`[ProtectedDecision]`" },
15
15
  { "kind": "skill-contains", "value": "`Customizations/`" },
16
16
  { "kind": "skill-contains", "value": "`Stage__Runtime__Engine=semantic`" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cratis/pi",
3
- "version": "7.22.0",
3
+ "version": "7.24.0",
4
4
  "description": "Configuration-aware Cratis AI integration for Pi",
5
5
  "type": "module",
6
6
  "files": [