@cratis/pi 7.32.0 → 7.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/corpus/agents/screenplay-modeler.md +1 -1
- package/package/corpus/agents/screenplay-renderer.md +1 -1
- package/package/corpus/agents/screenplay-reviewer.md +1 -1
- package/package/corpus/agents/slice-implementer.md +1 -1
- package/package/corpus/rules/profiles.md +1 -0
- package/package/corpus/skills/cratis-application-slice-conformance/LICENSE +2 -2
- package/package/corpus/skills/cratis-application-slice-conformance/SKILL.md +5 -0
- package/package/corpus/skills/cratis-application-slice-conformance/references/checklists.md +12 -0
- package/package/corpus/skills/cratis-application-slice-conformance/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-application-slice-specifications/LICENSE +2 -2
- package/package/corpus/skills/cratis-application-slice-specifications/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-arc-react-page/LICENSE +2 -2
- package/package/corpus/skills/cratis-arc-react-page/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-chronicle-event-modeling/SKILL.md +12 -6
- package/package/corpus/skills/cratis-chronicle-reactor/LICENSE +2 -2
- package/package/corpus/skills/cratis-chronicle-reactor/SKILL.md +5 -2
- package/package/corpus/skills/cratis-chronicle-reactor/references/provenance.md +3 -3
- package/package/corpus/skills/cratis-chronicle-reactor/references/slice-delivery-checklist.md +93 -0
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/LICENSE +2 -2
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/SKILL.md +1 -1
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/provenance.md +3 -3
- package/package/corpus/skills/cratis-chronicle-read-model-specifications/references/view-lifecycle-checks.md +79 -0
- package/package/corpus/skills/cratis-event-model-diagram/LICENSE +7 -0
- package/package/corpus/skills/cratis-event-model-diagram/SKILL.md +26 -2
- package/package/corpus/skills/cratis-event-model-diagram/references/provenance.md +19 -0
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/SKILL.md +16 -11
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/audit-format.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/automation-patterns.md +7 -7
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/effects-and-idempotency.md +1 -1
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/provenance.md +5 -6
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/public-events-and-direction.md +2 -3
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/realization-and-gap-fill.md +9 -5
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/todo-list-example.md +6 -6
- package/package/corpus/skills/cratis-screenplay-automations-and-translations/references/translate-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/SKILL.md +16 -15
- package/package/corpus/skills/cratis-screenplay-captures-and-reactions/references/invocation-identity.md +2 -2
- package/package/corpus/skills/cratis-screenplay-command-surface/SKILL.md +20 -19
- package/package/corpus/skills/cratis-screenplay-command-surface/references/compliance.md +3 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/references/context.md +1 -1
- package/package/corpus/skills/cratis-screenplay-command-surface/references/enum-numbers.md +93 -0
- package/package/corpus/skills/cratis-screenplay-command-surface/references/generated-values-and-responses.md +5 -6
- package/package/corpus/skills/cratis-screenplay-command-surface/references/validate-rules.md +4 -2
- package/package/corpus/skills/cratis-screenplay-delivery-planning/LICENSE +9 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/SKILL.md +118 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/parallel-delivery.md +45 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/provenance.md +29 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/slice-counting.md +43 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/references/velocity-and-capacity.md +48 -0
- package/package/corpus/skills/cratis-screenplay-delivery-planning/verification.json +16 -0
- package/package/corpus/skills/cratis-screenplay-discovery/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-discovery/SKILL.md +6 -5
- package/package/corpus/skills/cratis-screenplay-discovery/references/divergent-sweep.md +1 -0
- package/package/corpus/skills/cratis-screenplay-discovery/references/domain-analysis-template.md +92 -0
- package/package/corpus/skills/cratis-screenplay-discovery/references/personas-and-causes.md +2 -2
- package/package/corpus/skills/cratis-screenplay-discovery/references/provenance.md +4 -3
- package/package/corpus/skills/cratis-screenplay-discovery/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-event-modeling/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-event-modeling/SKILL.md +30 -29
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/nine-steps.md +7 -5
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md +13 -10
- package/package/corpus/skills/cratis-screenplay-event-modeling/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/SKILL.md +26 -13
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/candidate-inventory.md +6 -1
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/generate-notes.md +7 -0
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/prologue-safety.md +22 -17
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/rule-modeling.md +2 -2
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/references/side-car-migration.md +1 -0
- package/package/corpus/skills/cratis-screenplay-legacy-extraction/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-model-authoring/SKILL.md +25 -25
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/language-reference.md +8 -2
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-loop.md +8 -3
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/mcp-tools.md +38 -8
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/property-links.md +126 -0
- package/package/corpus/skills/cratis-screenplay-model-authoring/references/screen-authoring-workflow.md +3 -4
- package/package/corpus/skills/cratis-screenplay-model-authoring/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-model-review/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-model-review/SKILL.md +8 -8
- package/package/corpus/skills/cratis-screenplay-model-review/references/anti-patterns.md +2 -2
- package/package/corpus/skills/cratis-screenplay-model-review/references/checklist.md +4 -4
- package/package/corpus/skills/cratis-screenplay-model-review/references/model-inventory-report.md +75 -0
- package/package/corpus/skills/cratis-screenplay-model-review/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-screenplay-model-review/references/public-keys-and-routes.md +1 -1
- package/package/corpus/skills/cratis-screenplay-model-review/references/worked-example.md +4 -3
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/SKILL.md +7 -5
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/core-rules-digest.md +131 -0
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/phases.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/provenance.md +25 -4
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/reasoning-notes.md +2 -2
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/verdicts-and-modes.md +1 -1
- package/package/corpus/skills/cratis-screenplay-modeling-lifecycle/references/vocabulary-map.md +5 -4
- package/package/corpus/skills/cratis-screenplay-projections/SKILL.md +9 -5
- package/package/corpus/skills/cratis-screenplay-projections/references/pdl-grammar.md +4 -2
- package/package/corpus/skills/cratis-screenplay-read-surface/LICENSE +7 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/SKILL.md +16 -8
- package/package/corpus/skills/cratis-screenplay-read-surface/references/provenance.md +21 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/references/screen-patterns.md +130 -0
- package/package/corpus/skills/cratis-screenplay-read-surface/verification.json +1 -1
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/SKILL.md +60 -47
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/delivery-protocol.md +17 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/drift-and-ledger.md +19 -2
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/gap-fill-handoff.md +24 -6
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/renderability-gate.md +21 -16
- package/package/corpus/skills/cratis-screenplay-render-and-gap-fill/references/worked-example.md +34 -29
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/SKILL.md +5 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/berth-reservations.md +1 -1
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-design.md +5 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/invoicing-dues-example.md +32 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-catalogue.md +7 -6
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-examples.md +3 -3
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/scenario-workshop.md +15 -7
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/spec-forms-by-mode.md +11 -10
- package/package/corpus/skills/cratis-screenplay-scenario-coverage/references/view-and-story-specs.md +6 -4
- package/package/corpus/skills/cratis-screenplay-slice-design/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/SKILL.md +4 -3
- package/package/corpus/skills/cratis-screenplay-slice-design/references/command-inventory.md +2 -2
- package/package/corpus/skills/cratis-screenplay-slice-design/references/derived-condition-events.md +68 -0
- package/package/corpus/skills/cratis-screenplay-slice-design/references/field-lineage.md +1 -1
- package/package/corpus/skills/cratis-screenplay-slice-design/references/provenance.md +5 -5
- package/package/corpus/skills/cratis-screenplay-slice-design/references/read-model-design.md +17 -0
- package/package/corpus/skills/cratis-screenplay-slice-design/references/rule-layers.md +6 -6
- package/package/corpus/skills/cratis-screenplay-slice-design/references/worked-example.md +3 -3
- package/package/corpus/skills/cratis-screenplay-specifications/SKILL.md +7 -5
- package/package/corpus/skills/cratis-screenplay-specifications/references/examples-and-routes.md +4 -3
- package/package/corpus/skills/cratis-screenplay-specifications/references/generated-fixtures.md +3 -2
- package/package/corpus/skills/cratis-screenplay-specifications/references/persona-callers-and-cases.md +3 -0
- package/package/corpus/skills/cratis-screenplay-specifications/references/reactions-and-cascades.md +3 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/SKILL.md +14 -11
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/boundaries.md +31 -3
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/chronicle-boundaries.md +6 -6
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/consistency-and-concurrency.md +12 -11
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/evolution.md +18 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/provenance.md +4 -4
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/stream-patterns.md +1 -1
- package/package/corpus/skills/cratis-screenplay-streams-and-consistency/references/streams-example.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/SKILL.md +29 -18
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet-example.md +3 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/cheat-sheet.md +7 -4
- package/package/corpus/skills/cratis-screenplay-toolchain/references/diagnostics.md +21 -2
- package/package/corpus/skills/cratis-screenplay-toolchain/references/doc-contradictions.md +5 -3
- package/package/corpus/skills/cratis-screenplay-toolchain/references/executable-subset.md +32 -18
- package/package/corpus/skills/cratis-screenplay-toolchain/references/production-routes-and-filters.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/provenance.md +3 -4
- package/package/corpus/skills/cratis-screenplay-toolchain/references/renderable-subset.md +46 -16
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract-exceptions.json +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.json +1092 -17
- package/package/corpus/skills/cratis-screenplay-toolchain/references/screenplay-contract.version +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/sources-and-streams.md +1 -1
- package/package/corpus/skills/cratis-screenplay-toolchain/references/traps.md +8 -8
- package/package/corpus/skills/cratis-screenplay-toolchain/references/verdicts.md +18 -13
- package/package/corpus/skills/cratis-screenplay-toolchain/references/versions.md +41 -20
- package/package/corpus/skills/cratis-screenplay-toolchain/verification.json +7 -2
- package/package/corpus/skills/cratis-screenplay-ui-composition/LICENSE +2 -2
- package/package/corpus/skills/cratis-screenplay-ui-composition/SKILL.md +10 -10
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/flow-review.md +1 -1
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/provenance.md +2 -3
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/screen-composition-contract.md +41 -16
- package/package/corpus/skills/cratis-screenplay-ui-composition/references/worked-flow.md +17 -9
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/SKILL.md +85 -77
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/admission.md +65 -16
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/case-tables-and-whole-numbers.md +2 -2
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/render-example.md +3 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/rendered-application.md +30 -15
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/references/sandbox-and-specrunner.md +21 -1
- package/package/corpus/skills/cratis-stage-rendering-and-sandbox/verification.json +9 -4
- package/package/profile-catalog.json +1 -0
- package/package.json +1 -1
package/package/corpus/skills/cratis-screenplay-delivery-planning/references/parallel-delivery.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Parallel delivery
|
|
2
|
+
|
|
3
|
+
Read when splitting work across people or agents, building the dependency table or grouping issues.
|
|
4
|
+
|
|
5
|
+
## Why slices can run in parallel
|
|
6
|
+
A slice consumes events and views and produces events and views. Those are its contracts. A slice that needs `OrderConfirmed` can be built and specified against synthetic `given` events before the slice that produces it exists, because the model fixes the event's shape. When the producer lands, the consumer's specifications already describe what it expects. Slice design records this per slice (`cratis-screenplay-slice-design`, `references/slicing.md`); planning reads it.
|
|
7
|
+
|
|
8
|
+
This holds only for event and view contracts. Edges through `reads` of another slice's view, `invokes` of another slice's command from a reaction, and shared streams are real coordination points: record them as edges and plan an owner for each.
|
|
9
|
+
|
|
10
|
+
## Derive the dependency table
|
|
11
|
+
Use the Screenplay MCP rather than a board or memory (`cratis-screenplay-model-authoring`):
|
|
12
|
+
- `describe-application` for slice counts and children,
|
|
13
|
+
- `dependency-graph` at slice level (`from`/`to`) with its `edges`, `cycles` and `order` views as the starting point for the waves; its order is advisory and covers only `usesFactsFrom`/`reactsTo`/`decidesFrom` edges (`reads` maps to `decidesFrom`; only `asks` edges from invokes, actions and forms, and `shows` edges are left out of order and cycles),
|
|
14
|
+
- `dependencies` and `find-references` for each slice's consumed and produced contracts and for the `reads` and `invokes` edges; `invokes`, action and form edges are not ordered by the graph, and `reads` is ordered but still a coordination point.
|
|
15
|
+
|
|
16
|
+
`complete: false`, uncovered declarations or ambiguous bindings mean the table is incomplete; list them as unknown and resolve them in the model before relying on parallelism. Container `depends on` declarations are orientation, not execution order.
|
|
17
|
+
|
|
18
|
+
Table, one row per slice:
|
|
19
|
+
|
|
20
|
+
| Slice | Type | Realization | Consumes (from slice) | Produces | Waits on | Wave |
|
|
21
|
+
|---|---|---|---|---|---|---|
|
|
22
|
+
|
|
23
|
+
## Waves
|
|
24
|
+
- Wave 1: slices that consume nothing, or only events their own scope produces.
|
|
25
|
+
- Wave n: slices whose producers are all in earlier waves.
|
|
26
|
+
- Slices in one wave are independent and can run in parallel.
|
|
27
|
+
- A cycle means feedback; model it as an Automation slice or return to slice design. Do not schedule a cycle.
|
|
28
|
+
|
|
29
|
+
Because consumers can build against synthetic events, a wave boundary is an integration check (producer and consumer agree on the contract), not a hard start gate. Say which waves you started early and where the contract check will happen.
|
|
30
|
+
|
|
31
|
+
## Contract ownership
|
|
32
|
+
- Each event and view has one owning slice; its shape is changed in the model, never in a consumer.
|
|
33
|
+
- A contract change reopens every consumer in the table: recount and notify their owners.
|
|
34
|
+
- When people or agents work in parallel, brief each from the model's slice and its consumed contracts (a brief states the goal, the files owned, the exact verification command, the done condition, the stop conditions and the report format); one writer per branch or worktree.
|
|
35
|
+
|
|
36
|
+
## Slice groups and issues
|
|
37
|
+
- One GitHub issue per slice group: slices that share a view, a stream or an owner, small enough for one person to finish.
|
|
38
|
+
- Status block lists the slices (name, type, realization), the wave, blockers and each slice's planning status (todo, in progress, blocked, done). That vocabulary is per slice; the issue's own state follows the repository's hygiene (in progress, in review, paused, blocked, done when delivered). Update the block rather than adding progress comments.
|
|
39
|
+
- Claim before starting: assign the issue, keep an in-progress status in its body and check for an existing claim (for example `issue_work` where the harness provides it). If the group is already in progress, choose another; do not take over.
|
|
40
|
+
- Mark `blocked` only with the named producer, decision or outside party.
|
|
41
|
+
|
|
42
|
+
## Parallelism that does not pay
|
|
43
|
+
- Slices writing the same file, stream or external resource.
|
|
44
|
+
- Two hand-written slices that depend on the same unresolved integration.
|
|
45
|
+
- A wave with one slice: no parallelism, use the time for integration, review or the next wave's briefs.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Provenance
|
|
2
|
+
|
|
3
|
+
## Method lineage
|
|
4
|
+
The planning method (count the modeled units, let explicit contracts allow parallel work, estimate from the team's measured throughput, plan capacity and review with retrospective metrics) comes from the Event Modeling community: Adam Dymitruk's Event Modeling, and Martin Dilger's writing on estimating from event models. They are cited as practice. The text of this skill is written for Screenplay slices and Cratis delivery.
|
|
5
|
+
|
|
6
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
7
|
+
|
|
8
|
+
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
9
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
|
|
10
|
+
|
|
11
|
+
| Source file | Used in | How |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `.claude/skills/eventmodeling-orchestrating-event-modeling/references/project-planning-with-event-modeling.md`: contracts let steps proceed in parallel | `SKILL.md` ground rules, `references/parallel-delivery.md` | adapted closely; steps become slices, contracts are the events and views a slice consumes and produces in the `.play` model |
|
|
14
|
+
| same: velocity measured from history, estimating a project by counting | `SKILL.md` procedure, `references/velocity-and-capacity.md` | adapted closely; velocity becomes throughput of weighted slices from issue history, results are ranges with a stated basis |
|
|
15
|
+
| same: variable complexity (typical, complex, simple steps) | `references/slice-counting.md` "Weights" | adapted; weights are by slice type and realization and are calibrated by the team |
|
|
16
|
+
| same: capacity planning, dependency handling across teams, organization-level velocity | `references/velocity-and-capacity.md` "Capacity", `references/parallel-delivery.md` "Waves" | adapted; waves derived from the model's dependencies instead of a spreadsheet |
|
|
17
|
+
| same: common estimation mistakes (equal weights, non-implementation work, ignoring dependencies) | `references/slice-counting.md` "What not to count", `references/parallel-delivery.md` | adapted closely |
|
|
18
|
+
| same: retrospectives and key metrics table | `references/velocity-and-capacity.md` "Retrospective metrics" | adapted closely; metrics extended with cycle time by class, blocked time and rework |
|
|
19
|
+
| `.claude/skills/update-slice-status/SKILL.md`: closed slice status vocabulary and the already-in-status guard | `SKILL.md` "Status vocabulary" | adapted; four statuses (todo, in progress, blocked, done) applied to GitHub issues, the board API dropped; the guard becomes "pick another slice" and `issue_work` claim |
|
|
20
|
+
|
|
21
|
+
## Not adopted
|
|
22
|
+
| Source material | Why |
|
|
23
|
+
|---|---|
|
|
24
|
+
| "±50% versus ±10%" accuracy claims and "4-6 months guess, 6-9 months actual" comparisons | no source or data given; Cratis estimates are ranges derived from the team's own counts and rates |
|
|
25
|
+
| "Flat cost curve" diagrams and fixed example numbers (3 steps per sprint, 1 week per step) | illustrative figures, not facts; a team's throughput is measured, not assumed |
|
|
26
|
+
| Sprint and week-based schedule spreadsheets | replaced by waves, slice groups and ranges |
|
|
27
|
+
| The eventmodelers board, token and slice-status API, MCP slice listing, and node events | Screenplay MCP navigation and GitHub issues replace them |
|
|
28
|
+
| Statuses Created, Planned, Review, Assigned, Informational | replaced by the four-status set; review is a gate in the lifecycle, assignment is the issue assignee |
|
|
29
|
+
| Autonomous continue-without-asking behavior in the upstream orchestration | Cratis keeps the model-first gates and user authority; planning never skips review or acceptance |
|
package/package/corpus/skills/cratis-screenplay-delivery-planning/references/slice-counting.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Slice counting
|
|
2
|
+
|
|
3
|
+
Read when counting, classifying or weighing the slices of an accepted model.
|
|
4
|
+
|
|
5
|
+
## What counts
|
|
6
|
+
One unit per slice of an accepted model. The type is the slice's declared type; the model decides it, not the planner.
|
|
7
|
+
|
|
8
|
+
| Type | What it delivers | Usually realized by |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| StateChange | a command, its rules and the events it produces | Stage renders it where admitted; else hand-written |
|
|
11
|
+
| StateView | a read model with its projection and query | Stage renders it where admitted; else hand-written |
|
|
12
|
+
| Automation | a reaction, todo list or trigger doing follow-up work | hand-written against the model (gap-fill) |
|
|
13
|
+
| Translate | a capture or translator turning outside data into events | hand-written against the model (gap-fill) |
|
|
14
|
+
|
|
15
|
+
Screens and UI composition belong to the slice whose data and actions they show. Count a screen separately only when the plan has a separate frontend owner, and then count it as its own line, not as a slice.
|
|
16
|
+
|
|
17
|
+
Count a rendered slice and a hand-written slice in different rows even when they share a type. The first row's effort is review, verification and customization; the second's is implementation.
|
|
18
|
+
|
|
19
|
+
## What not to count as slices
|
|
20
|
+
Plan these as separate lines, not slice weight:
|
|
21
|
+
- modeling, review and acceptance gates (lifecycle phases P0 to P6); P7 to P9 verification is part of each slice's done criteria,
|
|
22
|
+
- environment, hosting, deployment, identity and authorization provider setup,
|
|
23
|
+
- integration with an outside system beyond the slice's own adapter (credentials, sandboxes, contract tests with the other party),
|
|
24
|
+
- migration of existing data,
|
|
25
|
+
- documentation and training.
|
|
26
|
+
|
|
27
|
+
## Realization check
|
|
28
|
+
Before pricing a slice as rendered, run the admission probe in `cratis-screenplay-render-and-gap-fill` for the whole model. Do not restate version pins in a plan; cite `cratis-screenplay-toolchain` `references/versions.md` for the pair you used. A slice Stage refuses (an `STAGE-ESM-*` code) is hand-written work with the model as contract: price it as hand-written and record the refusal code.
|
|
29
|
+
|
|
30
|
+
## Weights
|
|
31
|
+
Weights are the team's, calibrated from completed slices, not constants of the method. Start with a simple scale and let history replace it:
|
|
32
|
+
|
|
33
|
+
| Class | Starting weight (first estimate without history) |
|
|
34
|
+
|---|---|
|
|
35
|
+
| rendered StateChange or StateView, no customization | 1 (the reference) |
|
|
36
|
+
| StateChange or StateView with customization or hand-written | 2 |
|
|
37
|
+
| Automation or Translate | 3 |
|
|
38
|
+
| any slice with an outside system on the critical path | add a separate integration line |
|
|
39
|
+
|
|
40
|
+
These starting weights are placeholders to be replaced. State them as assumptions in the plan. After the first completed groups, derive each class's weight as its median actual effort divided by the median effort of the reference class.
|
|
41
|
+
|
|
42
|
+
## Re-count triggers
|
|
43
|
+
Recount when: the model's slice set changes, a slice's type changes, a slice splits or merges, Stage admission changes after a tool upgrade, or a hand-written slice turns out renderable (or the reverse).
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Velocity and capacity
|
|
2
|
+
|
|
3
|
+
Read when producing or updating an estimate, or when running a retrospective.
|
|
4
|
+
|
|
5
|
+
## Measure throughput from history
|
|
6
|
+
Throughput is the number of weighted slices a team completes per period, measured from the team's own finished slices.
|
|
7
|
+
|
|
8
|
+
1. List the completed slices of the last few periods (weeks or iterations). A slice is completed when it is `done` in the status vocabulary: built, specifications passing, conforming to the model.
|
|
9
|
+
2. Take dates from the issue or pull request history (opened and closed, or claimed and merged), not from memory.
|
|
10
|
+
3. Record per period: slices completed by class, effort spent (person-days or agent-sessions), and anything unusual (leave, outages, a model rework).
|
|
11
|
+
4. Compute the median and the lowest and highest period. Report all three.
|
|
12
|
+
|
|
13
|
+
With fewer than about three completed periods or a handful of slices, the number is a first estimate without history: say so, keep the range wide, and do not extrapolate a trend.
|
|
14
|
+
|
|
15
|
+
## Estimate as a range
|
|
16
|
+
```
|
|
17
|
+
remaining weighted slices = sum over classes (count x team weight)
|
|
18
|
+
duration low / expected / high = remaining / (high, median, low throughput)
|
|
19
|
+
```
|
|
20
|
+
- Report the range and its basis in one line: "N weighted slices; throughput X to Y per week from the last K weeks (slices ...)". Include the separate lines for work that is not slice work.
|
|
21
|
+
- Do not state accuracy percentages or comparisons with other methods; they cannot be derived from your data. Calibrate by comparing your past ranges with what happened (below).
|
|
22
|
+
|
|
23
|
+
## Capacity
|
|
24
|
+
Throughput scales with people only along the dependency table: the useful parallelism of a wave is the number of independent slices in it, capped by the number of people or agents. A slice has one owner, so its work cannot be split across workers.
|
|
25
|
+
```
|
|
26
|
+
lower bound for a wave = (weighted slices in the wave / workers in use) / throughput per worker
|
|
27
|
+
elapsed time for a wave = (largest total weight assigned to one worker) / throughput per worker
|
|
28
|
+
total elapsed time = sum over waves (waves are sequential)
|
|
29
|
+
```
|
|
30
|
+
- Assign the wave's slices to workers first (heaviest first, each to the least-loaded worker), then take the most-loaded worker. The aggregate formula is only a lower bound; the wave can never finish before its heaviest single slice.
|
|
31
|
+
- Example: three independent slices weighted 1, 1 and 3, three workers at one weighted unit per week. The lower bound says 5 / 3 = 1.7 weeks; the assignment gives loads 3, 1 and 1, so the wave takes 3 weeks. Split a heavy slice in the model (slice design) if it dominates a wave, never by sharing it between workers.
|
|
32
|
+
- Throughput per worker comes from history with that many workers; adding a worker adds coordination cost, so measure after the change rather than assuming it multiplies.
|
|
33
|
+
- Shared contracts (one event consumed by several slices) need one owner; count that integration as work.
|
|
34
|
+
- Capacity levers other than people: faster verification (spec run time, CI queue), fewer hand-written slices (a model change that Stage admits), better adapters. Estimate their effect from a before and after measurement, not a promise.
|
|
35
|
+
|
|
36
|
+
## Retrospective metrics
|
|
37
|
+
After each completed group or iteration, record:
|
|
38
|
+
|
|
39
|
+
| Metric | How | What it shows |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| Throughput | weighted slices done per period | the rate used for the next range |
|
|
42
|
+
| Slice cycle time by class | claimed to done, per class | which classes carry the cost; recalibrates weights |
|
|
43
|
+
| Estimate fit | planned range versus actual, per group | whether ranges were too narrow or too wide |
|
|
44
|
+
| Parallel share | slices worked in parallel / slices in waves that allowed it | whether parallelism was used |
|
|
45
|
+
| Blocked time | time in `blocked` and the named cause | dependency, decision or external waits |
|
|
46
|
+
| Rework | slices reopened after done, or recounted after a model change | model stability |
|
|
47
|
+
|
|
48
|
+
Use the results to adjust weights, widen or narrow ranges, and decide what to unblock first. Write them in `.ai-work/<task>/delivery-plan.md`; a pattern that must outlive the session becomes an issue.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill": "cratis-screenplay-delivery-planning",
|
|
3
|
+
"input": "The model is accepted. How long will delivering it take, in what order, and how do we split it across three people?",
|
|
4
|
+
"fixtures": [],
|
|
5
|
+
"assertions": [
|
|
6
|
+
{ "kind": "skill-contains", "value": "first estimate without history" },
|
|
7
|
+
{ "kind": "skill-contains", "value": "Count slices, not features." },
|
|
8
|
+
{ "kind": "skill-contains", "value": "`dependency-graph`" },
|
|
9
|
+
{ "kind": "skill-contains", "value": "already `in progress`" },
|
|
10
|
+
{ "kind": "skill-contains", "value": "Automation` and `Translate` are hand-written" },
|
|
11
|
+
{ "kind": "skill-contains", "value": "Never quote an accuracy", "file": "SKILL.md" },
|
|
12
|
+
{ "kind": "skill-contains", "value": "Estimate fit", "file": "references/velocity-and-capacity.md" },
|
|
13
|
+
{ "kind": "skill-contains", "value": "Wave 1", "file": "references/parallel-delivery.md" },
|
|
14
|
+
{ "kind": "skill-contains", "value": "One GitHub issue per slice group", "file": "references/parallel-delivery.md" }
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -31,5 +31,5 @@ SOFTWARE.
|
|
|
31
31
|
|
|
32
32
|
This skill also adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
|
|
33
33
|
(https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
|
|
34
|
-
https://nebulit.de), used with the
|
|
35
|
-
|
|
34
|
+
https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
|
|
35
|
+
material remains credited to Martin Dilger and Nebulit GmbH.
|
|
@@ -42,9 +42,9 @@ syntax and tool commands in `cratis-screenplay-toolchain`.
|
|
|
42
42
|
|
|
43
43
|
## Verified product sources
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
Current pins are listed once in `cratis-screenplay-toolchain` `references/versions.md`. The
|
|
46
|
+
statements below were checked at these older tags (Screenplay v4.66.0 `c89198b`, cratis CLI v3.28.3,
|
|
47
|
+
Stage v4.24.2, Arc v22.50.5, Chronicle v19.32.0), kept as provenance, not as current pins:
|
|
48
48
|
|
|
49
49
|
| Fact used here | Source |
|
|
50
50
|
| --- | --- |
|
|
@@ -57,7 +57,7 @@ Statements here were checked at those tags:
|
|
|
57
57
|
| Any `@pii` or `@sensitive` on a concept fails binding (PLAY0268) at 4.66.0; current markers are in `cratis-screenplay-command-surface` | `v4.66.0:Source/DotNET/Screenplay/Semantics/SemanticModelBinder.Concepts.cs:21-24` |
|
|
58
58
|
|
|
59
59
|
Every complete `screenplay` fence in this skill compiles with the standalone compiler
|
|
60
|
-
4.
|
|
60
|
+
4.139.0 (`--warnaserror`).
|
|
61
61
|
|
|
62
62
|
## Interview phase
|
|
63
63
|
|
|
@@ -174,7 +174,7 @@ decided apart from what you assumed. Never guess silently.
|
|
|
174
174
|
(`only if ...`), marked as stated intent not enforced in the model today, with its target
|
|
175
175
|
enforcement named for `cratis-screenplay-streams-and-consistency` and
|
|
176
176
|
`cratis-screenplay-slice-design`. Never state copies, attestation booleans or rules living
|
|
177
|
-
only in prose: `description` text
|
|
177
|
+
only in prose: `description` text reaches code only as XML doc comments, never as behavior.
|
|
178
178
|
- Ask how the work is done today without the system; question steps that exist only for software.
|
|
179
179
|
|
|
180
180
|
### Review questions (ask; do not apply mechanically)
|
|
@@ -238,6 +238,7 @@ and the report says which verdicts were not run (V2 to V5 are not run in discove
|
|
|
238
238
|
- `references/event-naming.md` - naming rules, not-an-event filter, repairs.
|
|
239
239
|
- `references/personas-and-causes.md` - role catalogue, Cannot resolved to executable gates.
|
|
240
240
|
- `references/divergent-sweep.md` - lenses for the wide pass.
|
|
241
|
+
- `references/domain-analysis-template.md` - read when requirements arrive as prose and a person must confirm your reading before you model: the note shape, requirement checks, expert questions.
|
|
241
242
|
- `references/plotting-and-handoff.md` - after / caused by / only if, plot format, whose turn it is, Storyline seed, handoff packet.
|
|
242
243
|
- `references/facilitation.md` - running sessions, disagreement, closing, unattended runs. Read when facilitating a group, handling disagreement, or closing an attended or unattended session.
|
|
243
244
|
- `references/human-workshop.md` - supporting a human workshop: preparation, run sheet, live scribing.
|
|
@@ -20,6 +20,7 @@ stage of the story:
|
|
|
20
20
|
| Afterwards | Renew, reopen, roll over, appeal, refund? | follow-on stories or branches |
|
|
21
21
|
| On behalf | Can someone act for another, or override? | Does/Cannot lines (denial specs) |
|
|
22
22
|
| Proof later | What will an auditor, regulator or angry customer ask to see? | facts that looked like detail |
|
|
23
|
+
| Without software | How would this run on paper, with people? Who acts, what triggers each action, what must they know first? Which step exists only because of the system (a loading state, a cache refresh, a session check)? | the real business steps; steps to drop; missing human hand-overs |
|
|
23
24
|
| Hotspots | For each hotspot named in step 2: what goes wrong there today? | the deepest branch set |
|
|
24
25
|
|
|
25
26
|
Outcome per lens and stage: modeled fact, set-aside (with why), open question, or "does not
|
package/package/corpus/skills/cratis-screenplay-discovery/references/domain-analysis-template.md
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Domain analysis note
|
|
2
|
+
|
|
3
|
+
Use this when requirements arrive as prose (a brief, tickets, a recorded session, an interview
|
|
4
|
+
transcript) and you want one readable summary before or alongside the first `.play` edits. The
|
|
5
|
+
`.play` model is the source of truth; this note is a work record that points to it. It lives in
|
|
6
|
+
`.ai-work/screenplay/` (session state), never in the model folder or `.cratis/`, and is replaced
|
|
7
|
+
by the model once the model says the same things. Adapted from Martin Dilger and Nebulit GmbH's
|
|
8
|
+
brainstorming-events domain analysis (see `provenance.md`), reshaped for Screenplay.
|
|
9
|
+
|
|
10
|
+
## When to write one
|
|
11
|
+
- The input is long or scattered and a person must confirm your reading before you model.
|
|
12
|
+
- A workshop produced notes that need turning into candidate events, roles and rules.
|
|
13
|
+
- A reviewer or domain expert needs one page to answer, without reading `.play`.
|
|
14
|
+
|
|
15
|
+
Skip it when the input is already short and structured; go straight to `references/storming-loop.md`.
|
|
16
|
+
|
|
17
|
+
## Working it out
|
|
18
|
+
1. Read the requirements and list the processes mentioned: who starts them, what steps follow,
|
|
19
|
+
where decisions and integrations occur.
|
|
20
|
+
2. Extract the state changes. Each completed change is a candidate event ("Customer places order"
|
|
21
|
+
becomes `OrderPlaced`): "payment processed" becomes a confirmation fact; "item shipped" becomes a
|
|
22
|
+
shipment fact.
|
|
23
|
+
3. Write the rules and invariants as stated ("can only ship once paid", "cancel within 24 hours").
|
|
24
|
+
Do not decide where they are enforced here.
|
|
25
|
+
4. Name the entities as event timelines: each is the story its events tell, with a business
|
|
26
|
+
identity. These are groupings of events, not attribute lists.
|
|
27
|
+
5. Note the questions the requirements do not answer.
|
|
28
|
+
|
|
29
|
+
## Template
|
|
30
|
+
```markdown
|
|
31
|
+
# Domain analysis: <domain>
|
|
32
|
+
|
|
33
|
+
Source: <documents, session, date> Participants: <roles, if a workshop>
|
|
34
|
+
|
|
35
|
+
## Roles
|
|
36
|
+
Human roles, then system actors (internal or external; what sets them off).
|
|
37
|
+
- <Role>: <description>. Does: <key actions>. Reads: <what it sees>. Cannot: <boundary>.
|
|
38
|
+
- <System actor> (internal | external): <description>. Triggers: <what it starts>.
|
|
39
|
+
|
|
40
|
+
## Entities (event timelines)
|
|
41
|
+
- <Entity> (identity: <business identity>)
|
|
42
|
+
|
|
43
|
+
## Business processes
|
|
44
|
+
1. <Process>: initiated by <actor>; steps <1 -> 2 -> 3>; outcome <what changes>.
|
|
45
|
+
|
|
46
|
+
## Candidate events
|
|
47
|
+
- <Entity>: <PastTenseEvent>: when, why, who or what causes it.
|
|
48
|
+
|
|
49
|
+
## Rules and constraints
|
|
50
|
+
- <Rule>: condition and consequence, as stated in the source.
|
|
51
|
+
|
|
52
|
+
## Questions for the domain expert
|
|
53
|
+
- <Unclear process, missing actor, boundary condition>.
|
|
54
|
+
|
|
55
|
+
## Where this went
|
|
56
|
+
<Pointers to the `.play` declarations once modeled, or "not yet modeled">
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Requirements that make a good source
|
|
60
|
+
Ask for, or write down as assumptions, each of these:
|
|
61
|
+
- **Specific scope.** "Orders have items, pricing, a delivery address and can be cancelled within
|
|
62
|
+
24 hours", not "handle orders".
|
|
63
|
+
- **Domain language**, not technical wording: "Customer places order with products", not "obj1
|
|
64
|
+
references obj2".
|
|
65
|
+
- **Explicit constraints.** "Authorize payment before confirming the order; refund if shipment
|
|
66
|
+
fails", not "process payments".
|
|
67
|
+
- **A complete role list.** Every actor an event or process mentions is in Roles, and every
|
|
68
|
+
event traces to one of them ("orders can be created" by whom?).
|
|
69
|
+
- **Edge cases.** What if payment is declined? Can an order change once shipping starts? What
|
|
70
|
+
triggers cancellation?
|
|
71
|
+
|
|
72
|
+
## Questions for the domain expert
|
|
73
|
+
Keep them concrete and one decision each; send the three that unblock the most. Examples:
|
|
74
|
+
- "When a payment is declined, does the order stay open, or end?"
|
|
75
|
+
- "Who may cancel after shipping starts, and what happens to the goods?"
|
|
76
|
+
- "Is a refund a separate step someone decides, or automatic?"
|
|
77
|
+
|
|
78
|
+
Answers become events, rules or specifications; unresolved ones stay in STATE.md as open
|
|
79
|
+
questions with the assumption in use (`cratis-screenplay-modeling-lifecycle` `references/stop-or-assume.md`).
|
|
80
|
+
|
|
81
|
+
## Not every failure is an event
|
|
82
|
+
A declined payment may be a refusal (nothing recorded) or a recorded fact that others react to
|
|
83
|
+
(`PaymentDeclined`). Ask which; do not turn every error condition into an event. Most rejections
|
|
84
|
+
are specifications (`then error`), recorded facts are the exception. See `references/event-naming.md`.
|
|
85
|
+
|
|
86
|
+
## Quality checks before sharing
|
|
87
|
+
- [ ] Every candidate event is past tense, one purpose, and names a completed change.
|
|
88
|
+
- [ ] No generic update or delete events (`RecordUpdated`); events describe business moments.
|
|
89
|
+
- [ ] Every role is distinct, and each event traces to one of them.
|
|
90
|
+
- [ ] No two candidate events mean the same thing.
|
|
91
|
+
- [ ] Rules are stated as the source states them, with unknowns left as questions.
|
|
92
|
+
- [ ] Work is not wasted on attributes: fields wait until commands and views are designed.
|
|
@@ -55,7 +55,7 @@ declares the same policies and persona with the one-line form.
|
|
|
55
55
|
## What a Cannot line becomes
|
|
56
56
|
|
|
57
57
|
The persona block is report-only: Screenplay neither binds nor enforces it, and no rendered
|
|
58
|
-
code contains it (`description` text
|
|
58
|
+
code contains it (`description` text reaches generated code only as XML doc comments). Cannot text is intent, not
|
|
59
59
|
protection. Discovery lists the candidates; each stays pending until a later phase resolves it
|
|
60
60
|
into exactly one of these:
|
|
61
61
|
|
|
@@ -64,7 +64,7 @@ into exactly one of these:
|
|
|
64
64
|
plus a `then denied` specification using `given caller as <Persona>` for a
|
|
65
65
|
synthesized witness, or an explicit effective-gate caller (`cratis-screenplay-scenario-coverage`). Every command and query
|
|
66
66
|
under an inherited module or feature `authorize` gets its own denial spec. Ownership
|
|
67
|
-
against a Uuid
|
|
67
|
+
against a text, Uuid, Date or DateTime subject renders at Stage 4.73.1; other subjects are STAGE-ESM-015: note it.
|
|
68
68
|
2. **Gap or target requirement.** The check depends on stored state ("only the requester may
|
|
69
69
|
withdraw") or cannot be gated today. Record it as a gap with its target enforcement for
|
|
70
70
|
`cratis-screenplay-streams-and-consistency`; it is not enforcement and not a passed denial.
|
|
@@ -20,11 +20,10 @@ the `.trogonai/interviews/` trail file (replaced by bounded STATE.md); e-commerc
|
|
|
20
20
|
Gherkin forms; the `total (calculated)` field example (contradicts the calculated-value rule);
|
|
21
21
|
"capture every error condition as an event" (most failures are rejections).
|
|
22
22
|
|
|
23
|
-
## Adapted closely (Martin Dilger and Nebulit GmbH
|
|
23
|
+
## Adapted closely (Martin Dilger and Nebulit GmbH)
|
|
24
24
|
|
|
25
25
|
Source: https://github.com/Nebulit-GmbH/agentic-engineer at commit `07b0f30648d663cb588d7e2c7aa031af9dfc21f2`,
|
|
26
|
-
by Martin Dilger and Nebulit GmbH (https://nebulit.de)
|
|
27
|
-
is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
26
|
+
by Martin Dilger and Nebulit GmbH (https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH.
|
|
28
27
|
|
|
29
28
|
| Source file | Used in | How |
|
|
30
29
|
|---|---|---|
|
|
@@ -36,6 +35,8 @@ is adapted with the agreement of Martin Dilger and Nebulit GmbH.
|
|
|
36
35
|
| same: essential fields only, no padding, payload-free simple transitions (lines 159-160) | `SKILL.md` step 6, `references/storming-loop.md` | now adapted closely; identity, concepts and `@pii` rules kept |
|
|
37
36
|
| same: handover from an outside party is a single moment, not a relocation | `SKILL.md` Modeling defaults | idea; our own wording kept |
|
|
38
37
|
| `.claude/skills/eventmodeling-storyboarding-events/SKILL.md`: "whose turn is it in the story?" (consistent actor perspective) | `references/plotting-and-handoff.md` "Whose turn is it in the story?" | adapted closely; lanes, columns and screen placement not adopted |
|
|
38
|
+
| `.claude/skills/eventmodeling-brainstorming-events/SKILL.md`: Domain Analysis document (roles, entities, processes, candidate events, rules, questions), "Questions for Domain Expert", "Best Practices for Requirements Analysis", quality checklist | `references/domain-analysis-template.md` | Adapted closely as an optional work record in `.ai-work/screenplay/`; roles use Does/Reads/Cannot, chapters, cells, swimlane rules and `meta.fields` dropped, "all error conditions have events" replaced by the refusal-versus-fact question |
|
|
39
|
+
| `.claude/skills/eventmodeling-core-rules/SKILL.md`: Offline-First Thinking | `references/divergent-sweep.md` lens "Without software" | Promoted to a named lens; our own wording |
|
|
39
40
|
|
|
40
41
|
Not adopted: board, chapter, column and `place-element` mechanics; the board API and `connect` skill.
|
|
41
42
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
{ "kind": "skill-contains", "value": "what can happen next *instead*" },
|
|
12
12
|
{ "kind": "skill-contains", "value": "No generic edit event or command name" },
|
|
13
13
|
{ "kind": "skill-contains", "value": "V2 to V5 are not run in discovery" },
|
|
14
|
-
{ "kind": "skill-contains", "value": "`description` text
|
|
14
|
+
{ "kind": "skill-contains", "value": "`description` text reaches code only as XML doc comments" },
|
|
15
15
|
{ "kind": "skill-contains", "value": "do not ask questions whose answers you" },
|
|
16
16
|
{ "kind": "skill-contains", "value": "Storyline" },
|
|
17
17
|
{ "kind": "skill-contains", "value": "do not pad events with fields just to reach a count" },
|
|
@@ -5,5 +5,5 @@ Licensed under the MIT license. See LICENSE file in the project root for full li
|
|
|
5
5
|
|
|
6
6
|
This skill adapts material from agentic-engineer by Martin Dilger and Nebulit GmbH
|
|
7
7
|
(https://github.com/Nebulit-GmbH/agentic-engineer, commit 07b0f30648d663cb588d7e2c7aa031af9dfc21f2;
|
|
8
|
-
https://nebulit.de), used with the
|
|
9
|
-
|
|
8
|
+
https://nebulit.de), used with the explicit consent of Martin Dilger and Nebulit GmbH. The adapted
|
|
9
|
+
material remains credited to Martin Dilger and Nebulit GmbH.
|
|
@@ -73,6 +73,7 @@ at the phase where they belong and run the downstream gates for the changed scop
|
|
|
73
73
|
| Existing system into a model (replaces P1-P2) | `cratis-screenplay-legacy-extraction` |
|
|
74
74
|
| P7-P9 execute, render, fall back, verify | `cratis-screenplay-render-and-gap-fill` |
|
|
75
75
|
| Tools, versions, verdict commands, diagnostics | `cratis-screenplay-toolchain` |
|
|
76
|
+
| Estimate, order or split delivery of an accepted model | `cratis-screenplay-delivery-planning` |
|
|
76
77
|
|
|
77
78
|
**4. Nine steps to phase skill.** [references/nine-steps.md](references/nine-steps.md)
|
|
78
79
|
keeps the activities, Screenplay output and facilitation questions of each step:
|
|
@@ -107,9 +108,12 @@ is the fallback, and neither names the other's verdict. Versions and commands:
|
|
|
107
108
|
- [ ] Personal data is classified on the `concept`, with a reason.
|
|
108
109
|
- [ ] Specifications name the rejections, not only the happy path.
|
|
109
110
|
- [ ] If the model must reach a runtime, check it binds with the tool that will
|
|
110
|
-
consume it.
|
|
111
|
-
(
|
|
112
|
-
|
|
111
|
+
consume it. Current pins: `cratis-screenplay-toolchain` `references/versions.md`. Stage 4.73.1
|
|
112
|
+
(in CLI 3.53.1) admits ESM v1 to v10 by version and renders `StateChange` and `StateView`
|
|
113
|
+
slices; reactions, captures, Automation and Translate, and the v7+ constructs in Stage's
|
|
114
|
+
admission table refuse with their own `STAGE-ESM-*` code, so those scopes are gap-fill with
|
|
115
|
+
the model as the contract. A reaction that produces events and invokes commands is refused
|
|
116
|
+
(`STAGE-ESM-037`) although Arc 22.72.0 and later can run it (the Stage scaffold's Arc 22.68.0 needs a proven override): hand-write it as one reactor, never split the modeled reaction.
|
|
113
117
|
|
|
114
118
|
## Parsed is not runnable
|
|
115
119
|
|
|
@@ -124,10 +128,9 @@ The independent verdicts V1 to V5 that report them are in
|
|
|
124
128
|
|
|
125
129
|
What binds depends on **which tool** you ask, so name the tool and its version:
|
|
126
130
|
|
|
127
|
-
- `Automation` and `Translate` slices, reactions, captures and triggers
|
|
128
|
-
standalone
|
|
129
|
-
|
|
130
|
-
is not admitted by ESM v1.* Stage 4.24.2 admits only ESM v1 to v4 and renders none of them.
|
|
131
|
+
- `Automation` and `Translate` slices, reactions, captures and triggers bind (ESM v6) on the
|
|
132
|
+
standalone tool and the CLI bundle. (Historical: the cratis 3.27.1 bundle, Screenplay 4.60.1,
|
|
133
|
+
reported *Slice '<name>' of type '<type>' is not admitted by ESM v1.*) Stage 4.73.1 renders none of them.
|
|
131
134
|
- `reads` and `concurrency` on a command do not bind (`PLAY0271`), so no decision is
|
|
132
135
|
protected against stale state. A reaction trigger's `reads` that only `invokes` is
|
|
133
136
|
report-only intent (`PLAY0270`); one that `produces` directly fails binding (`PLAY0268`).
|
|
@@ -135,12 +138,14 @@ What binds depends on **which tool** you ask, so name the tool and its version:
|
|
|
135
138
|
concepts do block binding (`PLAY0268`). Keep them anyway: the classification is
|
|
136
139
|
part of the model. Report the block.
|
|
137
140
|
- Generated values/responses bind and reference-execute as v7; sources, streams
|
|
138
|
-
and command/specification routes as v8; reaction `runs as` identity as v10
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
141
|
+
and command/specification routes as v8; reaction `runs as` identity as v10;
|
|
142
|
+
qualifying Double literals lower exactly as v11 and non-positional enum numbers
|
|
143
|
+
as v12. Use `screenplay test` or MCP `run-specifications` for V4.
|
|
144
|
+
Operations/systems, the `numbers exact` **source mode** (PLAY0268) and
|
|
145
|
+
refusal/redelivery remain unadmitted. Stage still refuses generated values and
|
|
146
|
+
responses (`STAGE-ESM-028`/`029`). For the pinned CLI/Stage pair
|
|
147
|
+
(`cratis-screenplay-toolchain/references/versions.md`), v10 reaches construct
|
|
148
|
+
admission, not full support.
|
|
144
149
|
Source/binding admission and target realization are separate gates.
|
|
145
150
|
|
|
146
151
|
The ESM versions, the full disposition table and the Step 7 clock example's binding
|
|
@@ -166,21 +171,17 @@ source is the single flow model.
|
|
|
166
171
|
|
|
167
172
|
## Verified product sources
|
|
168
173
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
compilation does not establish reference execution. The original baseline was checked at
|
|
181
|
-
tag `v4.31.0` (commit `355dffb`): `Documentation/screenplay/{slices,commands,folders,printing,interactions,specifications}.md`,
|
|
182
|
-
`projections/keys.md`, and decisions 0001 to 0014. Changed [nine-step examples](references/nine-steps.md)
|
|
183
|
-
use the newer commit and the 4.66.0 and 4.68.0 tools; do not attribute them to the old tag.
|
|
174
|
+
Current pins and which tool reports what live only in `cratis-screenplay-toolchain`
|
|
175
|
+
`references/versions.md`; read it before choosing a tool or reporting a version-dependent verdict.
|
|
176
|
+
The nine-step examples compile with the standalone compiler 4.139.0 and their specifications run
|
|
177
|
+
in the reference runner (compilation does not establish reference execution).
|
|
178
|
+
|
|
179
|
+
Historical provenance (not current pins): the original baseline was read at Screenplay tag
|
|
180
|
+
`v4.31.0` (commit `355dffb`: `Documentation/screenplay/{slices,commands,folders,printing,interactions,specifications}.md`,
|
|
181
|
+
`projections/keys.md`, decisions 0001 to 0014); the inline-contract and event-context changes
|
|
182
|
+
follow `commands.md`, `events.md` and decision 0023 at main `fd18129` (after v4.52.0); persona,
|
|
183
|
+
operation and stream dispositions were read at `v4.66.0` (`c89198b`) and generated values and
|
|
184
|
+
responses at `v4.68.0`.
|
|
184
185
|
|
|
185
186
|
Read [references/slice-type-rules.md](references/slice-type-rules.md) when deciding if a behavior is an Automation or a Translate slice.
|
|
186
187
|
|
|
@@ -231,7 +232,7 @@ compile or will not be safe. Both are deliberate.
|
|
|
231
232
|
- **A command may read state.** The generic method forbids `ReadModel -> Command`
|
|
232
233
|
edges. Screenplay ships `reads <ReadModel> [as <alias>] [by <property>]` so the
|
|
233
234
|
model shows what a state-dependent decision consulted. **It is not a protected
|
|
234
|
-
|
|
235
|
+
at Screenplay 4.139.0 (Screenplay#129 open):** nothing checks at append time that the state is still current,
|
|
235
236
|
the executable model rejects `reads` and `concurrency` (`PLAY0271`), and adding
|
|
236
237
|
`concurrency` does not make the decision safe (decision 0003, Screenplay #129).
|
|
237
238
|
Write a state-dependent rule as `reads <View>` plus `require <expr> message "..."`
|
|
@@ -198,9 +198,11 @@ system state?"* If no, it is co-production — one `StateChange` slice with seve
|
|
|
198
198
|
`produces` blocks, not an `Automation` slice.
|
|
199
199
|
|
|
200
200
|
**Output:** the `reaction`, in an `Automation` slice. It binds on the standalone
|
|
201
|
-
`screenplay`
|
|
202
|
-
|
|
203
|
-
`cratis-screenplay-toolchain`).
|
|
201
|
+
`screenplay` and the `cratis` bundle (ESM v6; the 3.27.1 bundle rejected the slice at binding) and
|
|
202
|
+
Stage 4.73.1 renders none, so the automation is gap-fill there (versions:
|
|
203
|
+
`cratis-screenplay-toolchain`). A reaction that `produces` and `invokes` stays one reaction: Stage
|
|
204
|
+
refuses it (`STAGE-ESM-037`) but Arc 22.72.0 and later run it as one reactor (events first, then
|
|
205
|
+
commands; no cross-effect transaction; the Stage scaffold's Arc 22.68.0 needs a proven override), so gap-fill it whole, never split it. When the automation decides from a view, declare it under
|
|
204
206
|
the trigger with `reads` (see `cratis-screenplay-captures-and-reactions`).
|
|
205
207
|
|
|
206
208
|
The example below is a complete document: a Monday-morning clock occurrence invokes a command
|
|
@@ -211,7 +213,7 @@ event source, so the invoked command binds its own identifier (`weekly`).
|
|
|
211
213
|
|
|
212
214
|
**What the model does and does not do.** The view stores the deadline (`dueDate`), never an
|
|
213
215
|
"overdue" flag: overdue is a comparison with the clock, not a fact to materialize. The
|
|
214
|
-
reaction's `reads UnpaidInvoice` is report-only metadata at 4.
|
|
216
|
+
reaction's `reads UnpaidInvoice` is report-only metadata (information `PLAY0270`, checked at 4.139.0);
|
|
215
217
|
it does not make the model consult the view. Binding therefore admits only a scheduled
|
|
216
218
|
invocation that records a timestamp. Choosing which invoices are overdue (due date before the
|
|
217
219
|
clock instant) is a target-side decision: record it as gap-fill with the model as the
|
|
@@ -277,7 +279,7 @@ module Invoicing
|
|
|
277
279
|
issuedAt = "2026-10-05T07:30:00Z"
|
|
278
280
|
```
|
|
279
281
|
|
|
280
|
-
At the example's verified Screenplay 4.
|
|
282
|
+
At the example's verified Screenplay version (4.139.0), iterating the overdue items needs code (a clock trigger reads the whole view and takes
|
|
281
283
|
no `by`); see `cratis-screenplay-automations-and-translations`. A reaction that `produces`
|
|
282
284
|
directly while it `reads` fails binding (`PLAY0268`): decide in a command instead.
|
|
283
285
|
|
package/package/corpus/skills/cratis-screenplay-event-modeling/references/parsed-not-runnable.md
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# Parsed is not runnable: ESM versions and dispositions
|
|
2
2
|
|
|
3
|
-
Checked at Screenplay v4.
|
|
4
|
-
`Documentation/screenplay/{commands,operations,event-sources,reactions,tool}.md`.
|
|
5
|
-
The binder selects v8 for event routes
|
|
3
|
+
Checked at Screenplay v4.139.0: `SemanticModelBinder.cs`, `Versions.cs`,
|
|
4
|
+
`Documentation/screenplay/{commands,operations,event-sources,reactions,tool,interoperability}.md`.
|
|
5
|
+
The binder selects v8 for event routes, v10 for declared reaction identity, v11 for retained
|
|
6
|
+
exact-lowered Double-mode literals and v12 for non-positional enum numbers.
|
|
6
7
|
Pins and consumer boundaries: toolchain `references/versions.md`.
|
|
7
8
|
|
|
8
9
|
## Which ESM version a model needs
|
|
@@ -14,12 +15,14 @@ Pins and consumer boundaries: toolchain `references/versions.md`.
|
|
|
14
15
|
- v7 for generated command values, responses, fixtures/return assertions and policy negation.
|
|
15
16
|
- v8 for sources/streams and command/specification routes.
|
|
16
17
|
- v9 for public-event contracts; v10 for reaction `runs as system` identity.
|
|
17
|
-
-
|
|
18
|
-
|
|
18
|
+
- v11 for exact lowering of qualifying Double-mode number literals; v12 for non-positional
|
|
19
|
+
enum member numbers (`cratis-screenplay-command-surface` `references/enum-numbers.md`).
|
|
20
|
+
- Operations/systems, the exact numeric **source mode** (`numbers exact`) and refusal/redelivery
|
|
21
|
+
remain unadmitted (PLAY0268). Version allocation is not inferred from an older planning decision.
|
|
19
22
|
|
|
20
23
|
## Dispositions to keep apart
|
|
21
24
|
|
|
22
|
-
| Construct | Standalone disposition (checked at v4.125.0) |
|
|
25
|
+
| Construct | Standalone disposition (checked at v4.125.0; v4.139.0 unchanged for these rows) |
|
|
23
26
|
| --- | --- |
|
|
24
27
|
| `persona`, domain/authentication metadata | Report-only; unknown named policies remain source defects |
|
|
25
28
|
| Compliance concepts | Bare `pii`/`secret` (4.127.0); binding still refuses PLAY0268, never remove protection |
|
|
@@ -27,10 +30,10 @@ Pins and consumer boundaries: toolchain `references/versions.md`.
|
|
|
27
30
|
| Composite stream ids | v8 routing; complete named parts/canonical comparisons, PLAY0515 refuses protected keys/sources; not a legacy text split |
|
|
28
31
|
| Command reads/concurrency | Legacy unprotected decisions, PLAY0271 |
|
|
29
32
|
| Invokes-only trigger reads | Report-only, not protected state; direct production with reads refuses |
|
|
30
|
-
| Generated values/responses | v7 binding/reference execution;
|
|
31
|
-
| Sources/streams and command/specification routes | v8 binding/reference execution; CLI
|
|
33
|
+
| Generated values/responses | v7 binding/reference execution; Stage 4.73.1 member refusals STAGE-ESM-028/029 |
|
|
34
|
+
| Sources/streams and command/specification routes | v8 binding/reference execution; the pinned CLI (toolchain `references/versions.md`) reaches Stage checks through v10 |
|
|
32
35
|
| Declared reaction invocation actor | v10 binding/reference execution; older CLI parser PLAY0137; Stage planner refuses v10 |
|
|
33
|
-
| Operations/systems, exact
|
|
36
|
+
| Operations/systems, `numbers exact` source mode, refusal/redelivery | Source accepted; whole binding refuses PLAY0268 |
|
|
34
37
|
| UI | Authoring/deferred metadata; runtime support is a separate consumer contract |
|
|
35
38
|
|
|
36
39
|
Run standalone `screenplay test` or MCP `run-specifications` for V4. Compile
|
|
@@ -42,7 +45,7 @@ and captures-and-reactions `references/invocation-identity.md`.
|
|
|
42
45
|
## The Step 7 clock example
|
|
43
46
|
|
|
44
47
|
The complete example in [nine-steps.md](nine-steps.md) (Step 7) had historical
|
|
45
|
-
4.66.0 compile/binding evidence (zero errors/warnings, executableReady true).
|
|
48
|
+
4.66.0 compile/binding evidence (re-compiled at 4.139.0) (zero errors/warnings, executableReady true).
|
|
46
49
|
Its invokes-only reads still record intent rather than execute the overdue
|
|
47
50
|
selection. Run its admitted specifications with the current reference route
|
|
48
51
|
before claiming a V4 pass; no overdue-selection proof follows from binding.
|