@eventmodelers/cli 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +175 -0
- package/cli.js +676 -0
- package/package.json +35 -0
- package/shared/build-kit/code-export.mjs +560 -0
- package/shared/build-kit/lib/ollama-agent.js +147 -0
- package/shared/build-kit/package.json +11 -0
- package/shared/build-kit/ralph-ollama.js +39 -0
- package/shared/build-kit/realtime-agent.js +18 -0
- package/stacks/axon/templates/.claude/skills/build-automation/SKILL.md +407 -0
- package/stacks/axon/templates/.claude/skills/build-automation/references/feature-flag-patterns.md +114 -0
- package/stacks/axon/templates/.claude/skills/build-automation-workflow/SKILL.md +496 -0
- package/stacks/axon/templates/.claude/skills/build-automation-workflow/references/axon-workflow-api.md +279 -0
- package/stacks/axon/templates/.claude/skills/build-automation-workflow/references/feature-flag-patterns.md +114 -0
- package/stacks/axon/templates/.claude/skills/build-state-change/SKILL.md +396 -0
- package/stacks/axon/templates/.claude/skills/build-state-change/references/axon-test-fixture-patterns.md +162 -0
- package/stacks/axon/templates/.claude/skills/build-state-change/references/feature-flag-patterns.md +56 -0
- package/stacks/axon/templates/.claude/skills/build-state-change/references/rest-api-patterns.md +115 -0
- package/stacks/axon/templates/.claude/skills/build-state-view/SKILL.md +282 -0
- package/stacks/axon/templates/.claude/skills/connect/SKILL.md +178 -0
- package/stacks/axon/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +611 -0
- package/stacks/axon/templates/.claude/skills/load-slice/SKILL.md +141 -0
- package/stacks/axon/templates/.claude/skills/update-slice-status/SKILL.md +105 -0
- package/stacks/axon/templates/build-kit/lib/AGENT.md +47 -0
- package/stacks/axon/templates/build-kit/lib/agent.sh +20 -0
- package/stacks/axon/templates/build-kit/lib/backend-prompt.md +158 -0
- package/stacks/axon/templates/build-kit/lib/prompt.md +126 -0
- package/stacks/axon/templates/build-kit/lib/ralph.js +369 -0
- package/stacks/axon/templates/build-kit/ralph-claude.js +44 -0
- package/stacks/axon/templates/build-kit/ralph.sh +98 -0
- package/stacks/axon/templates/root/.env.example +5 -0
- package/stacks/axon/templates/root/CLAUDE.md +60 -0
- package/stacks/axon/templates/root/README.md +44 -0
- package/stacks/axon/templates/root/docker-compose.yml +64 -0
- package/stacks/axon/templates/root/mvnw +259 -0
- package/stacks/axon/templates/root/mvnw.cmd +149 -0
- package/stacks/axon/templates/root/pom.xml +125 -0
- package/stacks/axon/templates/root/src/main/java/io/axoniq/quickstart/QuickstartApplication.java +128 -0
- package/stacks/axon/templates/root/src/main/java/io/axoniq/quickstart/config/WebConfig.java +155 -0
- package/stacks/axon/templates/root/src/main/resources/application.properties +2 -0
- package/stacks/axon/templates/root/src/main/resources/static/bg-body.png +0 -0
- package/stacks/axon/templates/root/src/main/resources/static/bg-header.png +0 -0
- package/stacks/axon/templates/root/src/main/resources/static/index.html +596 -0
- package/stacks/cratis-csharp/templates/.claude/skills/_shared/cratis-conventions.md +251 -0
- package/stacks/cratis-csharp/templates/.claude/skills/build-automation/SKILL.md +99 -0
- package/stacks/cratis-csharp/templates/.claude/skills/build-automation/references/patterns.md +115 -0
- package/stacks/cratis-csharp/templates/.claude/skills/build-state-change/SKILL.md +163 -0
- package/stacks/cratis-csharp/templates/.claude/skills/build-state-change/references/patterns.md +234 -0
- package/stacks/cratis-csharp/templates/.claude/skills/build-state-view/SKILL.md +120 -0
- package/stacks/cratis-csharp/templates/.claude/skills/build-state-view/references/patterns.md +166 -0
- package/stacks/cratis-csharp/templates/.claude/skills/connect/SKILL.md +169 -0
- package/stacks/cratis-csharp/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +609 -0
- package/stacks/cratis-csharp/templates/.claude/skills/load-slice/SKILL.md +141 -0
- package/stacks/cratis-csharp/templates/.claude/skills/update-slice-status/SKILL.md +105 -0
- package/stacks/cratis-csharp/templates/build-kit/lib/AGENT.md +58 -0
- package/stacks/cratis-csharp/templates/build-kit/lib/agent.sh +20 -0
- package/stacks/cratis-csharp/templates/build-kit/lib/backend-prompt.md +129 -0
- package/stacks/cratis-csharp/templates/build-kit/lib/prompt.md +124 -0
- package/stacks/cratis-csharp/templates/build-kit/lib/ralph.js +302 -0
- package/stacks/cratis-csharp/templates/build-kit/ralph-claude.js +37 -0
- package/stacks/cratis-csharp/templates/build-kit/ralph.sh +98 -0
- package/stacks/cratis-csharp/templates/root/.frontend/index.css +29 -0
- package/stacks/cratis-csharp/templates/root/.frontend/index.html +17 -0
- package/stacks/cratis-csharp/templates/root/.frontend/main.tsx +18 -0
- package/stacks/cratis-csharp/templates/root/.frontend/tsconfig.json +42 -0
- package/stacks/cratis-csharp/templates/root/.frontend/tsconfig.node.json +11 -0
- package/stacks/cratis-csharp/templates/root/.frontend/vite.config.ts +56 -0
- package/stacks/cratis-csharp/templates/root/App.tsx +23 -0
- package/stacks/cratis-csharp/templates/root/CLAUDE.md +62 -0
- package/stacks/cratis-csharp/templates/root/CratisApp.csproj +25 -0
- package/stacks/cratis-csharp/templates/root/CratisApp.sln +18 -0
- package/stacks/cratis-csharp/templates/root/GlobalUsings.cs +3 -0
- package/stacks/cratis-csharp/templates/root/Home.tsx +102 -0
- package/stacks/cratis-csharp/templates/root/Program.cs +26 -0
- package/stacks/cratis-csharp/templates/root/README.md +192 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/AllListings.ts +47 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/Listing.cs +11 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/Listing.ts +12 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/ListingDataTable.tsx +17 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Listing/index.ts +1 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Registration/Register.ts +51 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Registration/RegisterDialog.tsx +18 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Registration/Registration.cs +27 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/Registration/index.ts +1 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/SomeFeature.tsx +22 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/SomeName.cs +3 -0
- package/stacks/cratis-csharp/templates/root/SomeModule/SomeFeature/index.ts +1 -0
- package/stacks/cratis-csharp/templates/root/appsettings.Development.json +9 -0
- package/stacks/cratis-csharp/templates/root/appsettings.json +26 -0
- package/stacks/cratis-csharp/templates/root/docker-compose.yml +23 -0
- package/stacks/cratis-csharp/templates/root/package.json +33 -0
- package/stacks/cratis-csharp/templates/root/tsconfig.json +3 -0
- package/stacks/modeling-kit/templates/.claude/settings.local.json +13 -0
- package/stacks/modeling-kit/templates/.claude/skills/analyze-existing-model/SKILL.md +215 -0
- package/stacks/modeling-kit/templates/.claude/skills/attributes/SKILL.md +176 -0
- package/stacks/modeling-kit/templates/.claude/skills/connect/SKILL.md +182 -0
- package/stacks/modeling-kit/templates/.claude/skills/discover-storyboard/SKILL.md +383 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-applying-conways-law/SKILL.md +465 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/SKILL.md +587 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-brainstorming-events/references/facilitating-event-modeling-workshops.md +626 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-checking-completeness/SKILL.md +542 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-designing-event-models/SKILL.md +497 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-elaborating-scenarios/SKILL.md +783 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-inputs/SKILL.md +604 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-identifying-outputs/SKILL.md +699 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-integrating-legacy-systems/SKILL.md +674 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/SKILL.md +231 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/domain-patterns.md +150 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/patterns.md +329 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-optimizing-stream-design/references/snapshotting.md +204 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-orchestrating-event-modeling/SKILL.md +352 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-orchestrating-event-modeling/references/project-planning-with-event-modeling.md +341 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-plotting-events/SKILL.md +153 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/SKILL.md +136 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/references/examples.md +78 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-slicing-event-models/references/patterns.md +85 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-storyboarding-events/SKILL.md +655 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-translating-external-events/SKILL.md +479 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-validating-event-models/SKILL.md +234 -0
- package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-validating-event-models-checklist/SKILL.md +353 -0
- package/stacks/modeling-kit/templates/.claude/skills/examples/SKILL.md +200 -0
- package/stacks/modeling-kit/templates/.claude/skills/handle-comment/SKILL.md +94 -0
- package/stacks/modeling-kit/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +441 -0
- package/stacks/modeling-kit/templates/.claude/skills/place-element/SKILL.md +290 -0
- package/stacks/modeling-kit/templates/.claude/skills/storyboard/SKILL.md +212 -0
- package/stacks/modeling-kit/templates/.claude/skills/storyboard-screen/SKILL.md +123 -0
- package/stacks/modeling-kit/templates/.claude/skills/timeline/SKILL.md +353 -0
- package/stacks/modeling-kit/templates/.claude/skills/update-slice-status/SKILL.md +110 -0
- package/stacks/modeling-kit/templates/.claude/skills/wdyt/SKILL.md +134 -0
- package/stacks/modeling-kit/templates/kit/lib/agent.sh +20 -0
- package/stacks/modeling-kit/templates/kit/lib/ollama-agent.js +147 -0
- package/stacks/modeling-kit/templates/kit/lib/ralph.js +286 -0
- package/stacks/modeling-kit/templates/kit/package.json +12 -0
- package/stacks/modeling-kit/templates/kit/ralph-claude.js +50 -0
- package/stacks/modeling-kit/templates/kit/ralph-ollama.js +38 -0
- package/stacks/modeling-kit/templates/kit/ralph.sh +61 -0
- package/stacks/modeling-kit/templates/kit/realtime-agent.js +18 -0
- package/stacks/modeling-kit/templates/root/CLAUDE.md +56 -0
- package/stacks/node/templates/.claude/skills/build-automation/SKILL.md +266 -0
- package/stacks/node/templates/.claude/skills/build-state-change/SKILL.md +344 -0
- package/stacks/node/templates/.claude/skills/build-state-view/SKILL.md +412 -0
- package/stacks/node/templates/.claude/skills/connect/SKILL.md +178 -0
- package/stacks/node/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +628 -0
- package/stacks/node/templates/.claude/skills/load-slice/SKILL.md +143 -0
- package/stacks/node/templates/.claude/skills/update-slice-status/SKILL.md +110 -0
- package/stacks/node/templates/build-kit/README.md +86 -0
- package/stacks/node/templates/build-kit/lib/AGENT.md +47 -0
- package/stacks/node/templates/build-kit/lib/agent.sh +20 -0
- package/stacks/node/templates/build-kit/lib/backend-prompt.md +152 -0
- package/stacks/node/templates/build-kit/lib/prompt.md +122 -0
- package/stacks/node/templates/build-kit/lib/ralph.js +369 -0
- package/stacks/node/templates/build-kit/ralph-claude.js +44 -0
- package/stacks/node/templates/build-kit/ralph.sh +98 -0
- package/stacks/node/templates/root/.env.example +15 -0
- package/stacks/node/templates/root/CLAUDE.md +60 -0
- package/stacks/node/templates/root/docker-compose.yml +15 -0
- package/stacks/node/templates/root/flyway.conf +17 -0
- package/stacks/node/templates/root/migrations/V1__schema.sql.example +12 -0
- package/stacks/node/templates/root/package.json +50 -0
- package/stacks/node/templates/root/server.ts +130 -0
- package/stacks/node/templates/root/setup-env.sh +53 -0
- package/stacks/node/templates/root/src/common/assertions.ts +6 -0
- package/stacks/node/templates/root/src/common/db.ts +32 -0
- package/stacks/node/templates/root/src/common/loadPostgresEventstore.ts +23 -0
- package/stacks/node/templates/root/src/common/parseEndpoint.ts +51 -0
- package/stacks/node/templates/root/src/common/processorDlq.ts +28 -0
- package/stacks/node/templates/root/src/common/realtimeBroadcast.ts +12 -0
- package/stacks/node/templates/root/src/common/replay.ts +16 -0
- package/stacks/node/templates/root/src/common/routes.ts +19 -0
- package/stacks/node/templates/root/src/common/testHelpers.ts +44 -0
- package/stacks/node/templates/root/src/swagger.ts +34 -0
- package/stacks/node/templates/root/src/util/assertions.ts +6 -0
- package/stacks/node/templates/root/src/util/hash.ts +9 -0
- package/stacks/node/templates/root/src/util/sanitize.ts +23 -0
- package/stacks/node/templates/root/tsconfig.json +32 -0
- package/stacks/node/templates/root/vercel.json +8 -0
- package/stacks/supabase/templates/.claude/skills/build-automation/SKILL.md +266 -0
- package/stacks/supabase/templates/.claude/skills/build-state-change/SKILL.md +344 -0
- package/stacks/supabase/templates/.claude/skills/build-state-view/SKILL.md +390 -0
- package/stacks/supabase/templates/.claude/skills/build-webhook/SKILL.md +303 -0
- package/stacks/supabase/templates/.claude/skills/connect/SKILL.md +178 -0
- package/stacks/supabase/templates/.claude/skills/learn-eventmodelers-api/SKILL.md +628 -0
- package/stacks/supabase/templates/.claude/skills/load-slice/SKILL.md +143 -0
- package/stacks/supabase/templates/.claude/skills/update-slice-status/SKILL.md +110 -0
- package/stacks/supabase/templates/build-kit/README.md +86 -0
- package/stacks/supabase/templates/build-kit/lib/AGENT.md +47 -0
- package/stacks/supabase/templates/build-kit/lib/agent.sh +20 -0
- package/stacks/supabase/templates/build-kit/lib/backend-prompt.md +152 -0
- package/stacks/supabase/templates/build-kit/lib/prompt.md +123 -0
- package/stacks/supabase/templates/build-kit/lib/ralph.js +369 -0
- package/stacks/supabase/templates/build-kit/ralph-claude.js +44 -0
- package/stacks/supabase/templates/build-kit/ralph.sh +98 -0
- package/stacks/supabase/templates/root/.env.example +22 -0
- package/stacks/supabase/templates/root/CLAUDE.md +61 -0
- package/stacks/supabase/templates/root/flyway.conf +17 -0
- package/stacks/supabase/templates/root/package.json +52 -0
- package/stacks/supabase/templates/root/server.ts +177 -0
- package/stacks/supabase/templates/root/setup-env.sh +53 -0
- package/stacks/supabase/templates/root/src/common/assertions.ts +6 -0
- package/stacks/supabase/templates/root/src/common/db.ts +32 -0
- package/stacks/supabase/templates/root/src/common/loadPostgresEventstore.ts +23 -0
- package/stacks/supabase/templates/root/src/common/parseEndpoint.ts +51 -0
- package/stacks/supabase/templates/root/src/common/processorDlq.ts +28 -0
- package/stacks/supabase/templates/root/src/common/realtimeBroadcast.ts +19 -0
- package/stacks/supabase/templates/root/src/common/replay.ts +16 -0
- package/stacks/supabase/templates/root/src/common/routes.ts +23 -0
- package/stacks/supabase/templates/root/src/common/testHelpers.ts +54 -0
- package/stacks/supabase/templates/root/src/supabase/README.md +141 -0
- package/stacks/supabase/templates/root/src/supabase/api.ts +56 -0
- package/stacks/supabase/templates/root/src/supabase/requireOrgaAdmin.ts +32 -0
- package/stacks/supabase/templates/root/src/supabase/requireSysUser.ts +40 -0
- package/stacks/supabase/templates/root/src/supabase/requireUser.ts +72 -0
- package/stacks/supabase/templates/root/src/swagger.ts +34 -0
- package/stacks/supabase/templates/root/src/util/assertions.ts +6 -0
- package/stacks/supabase/templates/root/src/util/hash.ts +9 -0
- package/stacks/supabase/templates/root/src/util/sanitize.ts +23 -0
- package/stacks/supabase/templates/root/supabase/config.toml +295 -0
- package/stacks/supabase/templates/root/supabase/migrations/V1__schema.sql.example +12 -0
- package/stacks/supabase/templates/root/supabase/seed.sql +1 -0
- package/stacks/supabase/templates/root/tsconfig.json +32 -0
- package/stacks/supabase/templates/root/vercel.json +8 -0
package/stacks/modeling-kit/templates/.claude/skills/eventmodeling-checking-completeness/SKILL.md
ADDED
|
@@ -0,0 +1,542 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eventmodeling-checking-completeness
|
|
3
|
+
description: "Step 8 of Event Modeling - Completeness Check. Verify every field has origin and destination. Ensure complete event model before code generation. Use after all scenarios defined. Do not use for: architectural validation against event sourcing principles (use eventmodeling-validating-event-models) or elaborating Given-When-Then specs (use eventmodeling-elaborating-scenarios)."
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Write
|
|
6
|
+
- Bash
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Checking Completeness
|
|
10
|
+
|
|
11
|
+
> **Before doing anything else**, invoke the `connect` skill to resolve `TOKEN`, `BOARD_ID`, `ORG_ID`, and `BASE_URL`. Then invoke the `learn-eventmodelers-api` skill to load the full API reference. Do not proceed until both skills have been loaded.
|
|
12
|
+
|
|
13
|
+
## Board Context
|
|
14
|
+
|
|
15
|
+
Before starting, read the current board state to drive the analysis from what is actually on the board rather than relying solely on conversation context:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# All nodes (events, commands, read models, screens)
|
|
19
|
+
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
20
|
+
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=EVENT"
|
|
21
|
+
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
22
|
+
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=COMMAND"
|
|
23
|
+
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
24
|
+
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=READMODEL"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Use these results as the source of truth for the completeness check.
|
|
28
|
+
|
|
29
|
+
**Before treating any nodes as duplicates**: check each node's `data.linkedTo` field (see `learn-eventmodelers-api`). A node with `linkedTo` set is an intentional **linked copy** of another node — placed elsewhere on the timeline for readability, not a modeling defect. When two or more nodes share a title/type:
|
|
30
|
+
- If any of them carries `linkedTo`, do not report a duplicate. This is expected, not a gap.
|
|
31
|
+
- Never propose deleting, suppressing, or "cleaning up" either node in a linked pair. Specifically, never target the node that has *no* `linkedTo` (the original) for removal — copies reference it via `moveToWidget=<originNodeId>`, so deleting it breaks every copy.
|
|
32
|
+
- Only flag same-titled nodes as an actual duplicate gap when **none** of them has `linkedTo` — i.e., they are genuinely two independent, unlinked nodes describing the same concept.
|
|
33
|
+
|
|
34
|
+
After the analysis, use the `handle-comment` skill to post findings on relevant nodes — `TASK` for required fixes, `QUESTION` for gaps that need clarification.
|
|
35
|
+
|
|
36
|
+
## Workflow
|
|
37
|
+
|
|
38
|
+
Perform comprehensive completeness check:
|
|
39
|
+
|
|
40
|
+
### 1. Field Origin & Destination Matrix
|
|
41
|
+
For every field in every event, verify source and use:
|
|
42
|
+
|
|
43
|
+
```text
|
|
44
|
+
Event: OrderCreated
|
|
45
|
+
|
|
46
|
+
Field: orderId
|
|
47
|
+
Origin: Generated by system (UUID)
|
|
48
|
+
Destinations:
|
|
49
|
+
OrderConfirmed event (references)
|
|
50
|
+
OrderStatusView (displays)
|
|
51
|
+
OrderListView (displays)
|
|
52
|
+
OrderShipped event (references)
|
|
53
|
+
Status: Complete
|
|
54
|
+
|
|
55
|
+
Field: customerId
|
|
56
|
+
Origin: CreateOrder command (from UI)
|
|
57
|
+
Destinations:
|
|
58
|
+
OrderStatusView (displays)
|
|
59
|
+
OrderListView (displays)
|
|
60
|
+
Inventory System (knows who ordered)
|
|
61
|
+
Status: Complete
|
|
62
|
+
|
|
63
|
+
Field: items[]
|
|
64
|
+
Origin: CreateOrder command (user selects)
|
|
65
|
+
Destinations:
|
|
66
|
+
OrderStatusView (displays)
|
|
67
|
+
Inventory System (what to reserve)
|
|
68
|
+
Fulfillment System (what to ship)
|
|
69
|
+
Status: Complete
|
|
70
|
+
|
|
71
|
+
Field: total
|
|
72
|
+
Origin: Calculated from items[] and unit prices
|
|
73
|
+
Destinations:
|
|
74
|
+
OrderStatusView (displays)
|
|
75
|
+
OrderListView (displays)
|
|
76
|
+
PaymentSystem (amount to charge)
|
|
77
|
+
Accounting (for reconciliation)
|
|
78
|
+
Status: Complete
|
|
79
|
+
|
|
80
|
+
Field: shippingAddress
|
|
81
|
+
Origin: CreateOrder command (user enters)
|
|
82
|
+
Destinations:
|
|
83
|
+
OrderStatusView (displays)
|
|
84
|
+
Fulfillment System (where to ship)
|
|
85
|
+
Carrier (delivery address)
|
|
86
|
+
Status: Complete
|
|
87
|
+
|
|
88
|
+
Field: createdAt
|
|
89
|
+
Origin: System timestamp when event created
|
|
90
|
+
Destinations:
|
|
91
|
+
OrderStatusView (displays)
|
|
92
|
+
OrderListView (displays)
|
|
93
|
+
Metrics (average order age)
|
|
94
|
+
Status: Complete
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 2. Check All Commands
|
|
98
|
+
Verify every command input is captured:
|
|
99
|
+
|
|
100
|
+
```text
|
|
101
|
+
Command: CreateOrder
|
|
102
|
+
Input: customerId, items[], shippingAddress
|
|
103
|
+
customerId → OrderCreated.customerId
|
|
104
|
+
items[] → OrderCreated.items
|
|
105
|
+
shippingAddress → OrderCreated.shippingAddress
|
|
106
|
+
Status: All inputs captured
|
|
107
|
+
|
|
108
|
+
Command: ConfirmOrder
|
|
109
|
+
Input: orderId, paymentMethod
|
|
110
|
+
orderId → OrderConfirmed.orderId (implicit)
|
|
111
|
+
paymentMethod → OrderConfirmed.paymentMethod
|
|
112
|
+
Status: All inputs captured
|
|
113
|
+
|
|
114
|
+
Command: AuthorizePayment
|
|
115
|
+
Input: orderId, paymentId, authCode
|
|
116
|
+
orderId → PaymentAuthorized.orderId (implicit)
|
|
117
|
+
paymentId → PaymentAuthorized.paymentId
|
|
118
|
+
authCode → PaymentAuthorized.authCode
|
|
119
|
+
Status: All inputs captured
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 3. Check All Read Models
|
|
123
|
+
Verify read models have all needed data:
|
|
124
|
+
|
|
125
|
+
```text
|
|
126
|
+
ReadModel: OrderStatusView
|
|
127
|
+
Needs to display:
|
|
128
|
+
orderId ← OrderCreated
|
|
129
|
+
customerId ← OrderCreated
|
|
130
|
+
status ← OrderConfirmed, PaymentAuthorized, etc.
|
|
131
|
+
items ← OrderCreated
|
|
132
|
+
total ← OrderCreated
|
|
133
|
+
createdAt ← OrderCreated
|
|
134
|
+
confirmedAt ← OrderConfirmed
|
|
135
|
+
paymentId ← PaymentAuthorized
|
|
136
|
+
paymentMethod ← OrderConfirmed
|
|
137
|
+
shipmentId ← OrderShipped
|
|
138
|
+
trackingNumber ← OrderShipped
|
|
139
|
+
Status: All fields sourced
|
|
140
|
+
|
|
141
|
+
ReadModel: OrderListView
|
|
142
|
+
Needs to display:
|
|
143
|
+
orderId ← OrderCreated
|
|
144
|
+
customerId ← OrderCreated
|
|
145
|
+
total ← OrderCreated
|
|
146
|
+
status ← OrderConfirmed, OrderCancelled, etc.
|
|
147
|
+
createdAt ← OrderCreated
|
|
148
|
+
Status: All fields sourced
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### 4. Check Slice Coverage
|
|
152
|
+
|
|
153
|
+
Every column that holds a COMMAND or READMODEL node must have a slice defined (a SLICE_BORDER node on that column) — otherwise it can never be built as a feature. Skip columns whose COMMAND/READMODEL node has `data.linkedTo` set: it's a linked copy (see Board Context above), and only the original's column needs a slice.
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
curl -s -H "x-token: $TOKEN" -H "x-board-id: $BOARD_ID" \
|
|
157
|
+
"$BASE_URL/api/org/$ORG_ID/boards/$BOARD_ID/nodes?type=SLICE_BORDER"
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Cross-reference each COMMAND/READMODEL node's column against the `columnId` of the SLICE_BORDER nodes:
|
|
161
|
+
|
|
162
|
+
```text
|
|
163
|
+
Column: CreateOrder (COMMAND)
|
|
164
|
+
Slice defined? Yes — "Place Order"
|
|
165
|
+
Status: Covered
|
|
166
|
+
|
|
167
|
+
Column: OrderStatusView (READMODEL)
|
|
168
|
+
Slice defined? No
|
|
169
|
+
Status: Missing slice — flag as gap
|
|
170
|
+
|
|
171
|
+
Column: ConfirmOrder (COMMAND, linkedTo set — copy of the original in another column)
|
|
172
|
+
Slice defined? N/A — linked copy, exempt
|
|
173
|
+
Status: Skip
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### 5. Check Event Stream Completeness
|
|
177
|
+
Verify no "missing" events:
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
Scenario: Order from creation to delivery
|
|
181
|
+
|
|
182
|
+
Timeline:
|
|
183
|
+
1. OrderCreated (from CreateOrder command)
|
|
184
|
+
2. OrderConfirmed (from ConfirmOrder command)
|
|
185
|
+
3. PaymentAuthorized (from AuthorizePayment processor command)
|
|
186
|
+
4. InventoryReserved (from ReserveInventory processor command)
|
|
187
|
+
5. OrderShipped (from CreateShipment processor command)
|
|
188
|
+
6. DeliveryConfirmed (from MarkDelivered processor command)
|
|
189
|
+
|
|
190
|
+
Missing events? None identified
|
|
191
|
+
|
|
192
|
+
Alternative paths:
|
|
193
|
+
- OrderCancelled (can happen after OrderCreated or OrderConfirmed)
|
|
194
|
+
- PaymentFailed (can happen during PaymentAuthorized)
|
|
195
|
+
- RefundInitiated (can happen after PaymentFailed or OrderCancelled)
|
|
196
|
+
|
|
197
|
+
Status: All paths covered
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### 6. Check System Boundaries
|
|
201
|
+
Verify each system owns events:
|
|
202
|
+
|
|
203
|
+
```text
|
|
204
|
+
Order System
|
|
205
|
+
Events: OrderCreated, OrderConfirmed, OrderCancelled
|
|
206
|
+
Processor: None (triggers other systems)
|
|
207
|
+
Status: Clean ownership
|
|
208
|
+
|
|
209
|
+
Payment System
|
|
210
|
+
Events: PaymentAuthorized, PaymentFailed, PaymentRefunded
|
|
211
|
+
Processor: PaymentAuthorizer (listens to OrderConfirmed)
|
|
212
|
+
Status: Clean ownership
|
|
213
|
+
|
|
214
|
+
Inventory System
|
|
215
|
+
Events: InventoryReserved, InventoryReleased
|
|
216
|
+
Processor: InventoryReserver (listens to PaymentAuthorized)
|
|
217
|
+
Status: Clean ownership
|
|
218
|
+
|
|
219
|
+
Fulfillment System
|
|
220
|
+
Events: OrderShipped, DeliveryConfirmed
|
|
221
|
+
Processor: ShipmentCreator (listens to InventoryReserved)
|
|
222
|
+
Status: Clean ownership
|
|
223
|
+
|
|
224
|
+
Notification System
|
|
225
|
+
Events: None (no persistence, info-only)
|
|
226
|
+
Processor: Notifier (listens to all events)
|
|
227
|
+
Status: Cross-cutting concern
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### 7. Define Workflow Step Contracts
|
|
231
|
+
Each workflow step is a contract between the previous step and the next. Document preconditions and postconditions:
|
|
232
|
+
|
|
233
|
+
```text
|
|
234
|
+
Workflow Step 1: CreateOrder (Step Owns: Order Creation)
|
|
235
|
+
|
|
236
|
+
Preconditions (what must exist before this step):
|
|
237
|
+
- Customer must exist
|
|
238
|
+
- Products must exist in catalog
|
|
239
|
+
- User must be authenticated
|
|
240
|
+
|
|
241
|
+
Postconditions (what exists after this step):
|
|
242
|
+
- OrderCreated event exists
|
|
243
|
+
- Event contains: orderId, customerId, items, total, shippingAddress, createdAt
|
|
244
|
+
|
|
245
|
+
Contract: Any system can assume if these postconditions are true,
|
|
246
|
+
the order has been properly created through this step.
|
|
247
|
+
|
|
248
|
+
--- Workflow Step 2: ConfirmOrder (Step Owns: Order Confirmation)
|
|
249
|
+
|
|
250
|
+
Preconditions (depends on Step 1 postcondition):
|
|
251
|
+
- OrderCreated event must exist ( from Step 1 contract)
|
|
252
|
+
- Customer must select payment method
|
|
253
|
+
|
|
254
|
+
Postconditions (what exists after this step):
|
|
255
|
+
- OrderConfirmed event exists
|
|
256
|
+
- Event contains: orderId, paymentMethod, confirmedAt
|
|
257
|
+
|
|
258
|
+
Contract: Any system can assume if these postconditions are true,
|
|
259
|
+
the order has been properly confirmed.
|
|
260
|
+
|
|
261
|
+
--- Workflow Step 3: AuthorizePayment (Step Owns: Payment Authorization)
|
|
262
|
+
|
|
263
|
+
Preconditions (depends on Step 2 postcondition):
|
|
264
|
+
- OrderConfirmed event must exist ( from Step 2 contract)
|
|
265
|
+
- Payment method must be valid
|
|
266
|
+
|
|
267
|
+
Postconditions (what exists after this step):
|
|
268
|
+
- PaymentAuthorized event exists
|
|
269
|
+
- Event contains: paymentId, authCode, amount
|
|
270
|
+
|
|
271
|
+
Contract: Once this postcondition is true, next steps can proceed
|
|
272
|
+
without re-checking payment (trust the contract).
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Why Contracts Matter for Parallel Development**:
|
|
276
|
+
```text
|
|
277
|
+
Team A: Works on CreateOrder (Step 1)
|
|
278
|
+
→ Knows postcondition: OrderCreated with specific fields
|
|
279
|
+
→ Knows other teams depend on this
|
|
280
|
+
|
|
281
|
+
Team B: Works on ConfirmOrder (Step 2)
|
|
282
|
+
→ Can start immediately, doesn't wait for Step 1 implementation
|
|
283
|
+
→ Just needs to know: "I expect OrderCreated event with these fields"
|
|
284
|
+
→ Writes tests that mock the OrderCreated event
|
|
285
|
+
→ When Step 1 is done, tests pass immediately
|
|
286
|
+
|
|
287
|
+
Team C: Works on AuthorizePayment (Step 3)
|
|
288
|
+
→ Can start immediately
|
|
289
|
+
→ Expects: OrderConfirmed event with these fields
|
|
290
|
+
→ When Step 2 is done, tests pass immediately
|
|
291
|
+
|
|
292
|
+
Result: 3 teams working in parallel instead of waiting sequentially!
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### 8. Check Field Traceability
|
|
296
|
+
Matrix of all fields origin → destination:
|
|
297
|
+
|
|
298
|
+
```markdown
|
|
299
|
+
| Field | Event | Command | Read Model | Processor |
|
|
300
|
+
|-------|-------|---------|-----------|-----------|
|
|
301
|
+
| orderId | OrderCreated | - | All views | All |
|
|
302
|
+
| customerId | OrderCreated | CreateOrder | OrderStatusView | - |
|
|
303
|
+
| items | OrderCreated | CreateOrder | List/Status views | Inventory |
|
|
304
|
+
| total | OrderCreated | - | List/Status views | - |
|
|
305
|
+
| paymentId | PaymentAuthorized | AuthorizePayment | StatusView | Inventory |
|
|
306
|
+
| shipmentId | OrderShipped | CreateShipment | StatusView | Notification |
|
|
307
|
+
| trackingNumber | OrderShipped | - | TrackingView | Notification |
|
|
308
|
+
|
|
309
|
+
Status: All fields traceable
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### 9. Identify Gaps
|
|
313
|
+
Document any missing pieces:
|
|
314
|
+
|
|
315
|
+
```text
|
|
316
|
+
Analysis: Are there any missing fields?
|
|
317
|
+
- Estimated delivery date?
|
|
318
|
+
→ Need to add to OrderShipped event
|
|
319
|
+
→ Can be calculated from carrier
|
|
320
|
+
→ Add to ShipmentTrackingView
|
|
321
|
+
|
|
322
|
+
- Cancellation reason?
|
|
323
|
+
→ Already in OrderCancelled event
|
|
324
|
+
|
|
325
|
+
- Payment failure reason?
|
|
326
|
+
→ Already in PaymentFailed event
|
|
327
|
+
|
|
328
|
+
- Refund status?
|
|
329
|
+
→ Need to track in RefundInitiated event
|
|
330
|
+
→ Add to PaymentStatusView
|
|
331
|
+
|
|
332
|
+
Actions taken:
|
|
333
|
+
Add estimatedDelivery to OrderShipped
|
|
334
|
+
Add refundStatus to PaymentStatusView
|
|
335
|
+
Add refundInitiatedAt to OrderStatusView
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## Output Format
|
|
339
|
+
|
|
340
|
+
Present as:
|
|
341
|
+
|
|
342
|
+
```markdown
|
|
343
|
+
# Completeness Check: [Domain Name]
|
|
344
|
+
|
|
345
|
+
## Workflow Step Contracts
|
|
346
|
+
|
|
347
|
+
### Step 1: CreateOrder
|
|
348
|
+
|
|
349
|
+
**Preconditions**:
|
|
350
|
+
- Customer exists in system
|
|
351
|
+
- Products exist in catalog
|
|
352
|
+
|
|
353
|
+
**Postconditions**:
|
|
354
|
+
- OrderCreated event exists with fields: [list]
|
|
355
|
+
|
|
356
|
+
**Teams that depend on this contract**: [All downstream teams]
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
### Step 2: ConfirmOrder
|
|
361
|
+
|
|
362
|
+
**Preconditions** (depends on Step 1):
|
|
363
|
+
- OrderCreated event exists
|
|
364
|
+
|
|
365
|
+
**Postconditions**:
|
|
366
|
+
- OrderConfirmed event exists with fields: [list]
|
|
367
|
+
|
|
368
|
+
--- [Continue for each workflow step]
|
|
369
|
+
|
|
370
|
+
---
|
|
371
|
+
|
|
372
|
+
## Field Traceability Matrix
|
|
373
|
+
|
|
374
|
+
### Events
|
|
375
|
+
|
|
376
|
+
| Event | Field | Origin | Destinations | Status |
|
|
377
|
+
|-------|-------|--------|-------------|--------|
|
|
378
|
+
| OrderCreated | orderId | System | ConfirmOrder, Views | |
|
|
379
|
+
| OrderCreated | customerId | CreateOrder | All views | |
|
|
380
|
+
| OrderCreated | items | CreateOrder | Inventory, Views | |
|
|
381
|
+
| OrderCreated | total | Calculated | Views, Payment | |
|
|
382
|
+
| OrderConfirmed | paymentId | AuthorizePayment | Views, Accounting | |
|
|
383
|
+
| OrderShipped | trackingNumber | Carrier | TrackingView | |
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
## System Ownership Verification
|
|
388
|
+
|
|
389
|
+
### Order System
|
|
390
|
+
- Events owned: OrderCreated, OrderConfirmed, OrderCancelled
|
|
391
|
+
- Completeness: All order lifecycle events present
|
|
392
|
+
|
|
393
|
+
### Payment System
|
|
394
|
+
- Events owned: PaymentAuthorized, PaymentFailed, PaymentRefunded
|
|
395
|
+
- Completeness: All payment states covered
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
## Command → Event Verification
|
|
400
|
+
|
|
401
|
+
| Command | Input | Event | Captured |
|
|
402
|
+
|---------|-------|-------|----------|
|
|
403
|
+
| CreateOrder | customerId, items, address | OrderCreated | |
|
|
404
|
+
| ConfirmOrder | paymentMethod | OrderConfirmed | |
|
|
405
|
+
| AuthorizePayment | paymentId, authCode | PaymentAuthorized | |
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## Slice Coverage
|
|
410
|
+
|
|
411
|
+
| Column | Node | Has Slice? | Status |
|
|
412
|
+
|--------|------|-----------|--------|
|
|
413
|
+
| 1 | CreateOrder (COMMAND) | Yes — "Place Order" | |
|
|
414
|
+
| 2 | OrderStatusView (READMODEL) | No | Missing slice |
|
|
415
|
+
| 3 | ConfirmOrder (COMMAND, linked copy) | N/A | Exempt (linkedTo set) |
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## Read Model Coverage
|
|
420
|
+
|
|
421
|
+
### OrderStatusView
|
|
422
|
+
- All relevant event data included
|
|
423
|
+
- All user display needs met
|
|
424
|
+
- All processor decision fields present
|
|
425
|
+
|
|
426
|
+
### OrderListView
|
|
427
|
+
- Summary fields captured
|
|
428
|
+
- Filtering/sorting fields present
|
|
429
|
+
- Linked to OrderStatusView for details
|
|
430
|
+
|
|
431
|
+
---
|
|
432
|
+
|
|
433
|
+
## Gap Analysis
|
|
434
|
+
|
|
435
|
+
### Issues Found
|
|
436
|
+
1. Estimated delivery date missing
|
|
437
|
+
- Fix: Add to OrderShipped event
|
|
438
|
+
- Type: string (ISO 8601 date)
|
|
439
|
+
- Source: Calculated from carrier API
|
|
440
|
+
- Status: Will add in next iteration
|
|
441
|
+
|
|
442
|
+
2. Refund tracking incomplete
|
|
443
|
+
- Fix: Add RefundInitiated event timestamp
|
|
444
|
+
- Fix: Add refund status to PaymentStatusView
|
|
445
|
+
- Status: Will add in next iteration
|
|
446
|
+
|
|
447
|
+
### No Critical Gaps
|
|
448
|
+
- All events properly sourced
|
|
449
|
+
- All command inputs captured
|
|
450
|
+
- All read models have data
|
|
451
|
+
- Event flow complete
|
|
452
|
+
- System boundaries clear
|
|
453
|
+
|
|
454
|
+
---
|
|
455
|
+
|
|
456
|
+
## Readiness Assessment
|
|
457
|
+
|
|
458
|
+
**Overall Completeness**: 95%
|
|
459
|
+
|
|
460
|
+
**Blockers**: None
|
|
461
|
+
|
|
462
|
+
**Ready for Code Generation**: YES
|
|
463
|
+
|
|
464
|
+
**Minor Improvements**:
|
|
465
|
+
- Add estimated delivery date (non-blocking)
|
|
466
|
+
- Enhance refund tracking (non-blocking)
|
|
467
|
+
|
|
468
|
+
**Recommendation**: Proceed to code generation phase.
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
## Quality Checklist
|
|
472
|
+
|
|
473
|
+
- [ ] Every field has clear origin
|
|
474
|
+
- [ ] Every field has identified destinations
|
|
475
|
+
- [ ] All command inputs are captured
|
|
476
|
+
- [ ] All read models have sources
|
|
477
|
+
- [ ] **Every column with a COMMAND or READMODEL node has a slice defined (unless it's a linked copy)**
|
|
478
|
+
- [ ] Event flow is complete
|
|
479
|
+
- [ ] No events are missing
|
|
480
|
+
- [ ] System boundaries are clear
|
|
481
|
+
- [ ] Alternative paths covered
|
|
482
|
+
- [ ] Error paths documented
|
|
483
|
+
- [ ] Processors are identified
|
|
484
|
+
- [ ] No circular dependencies
|
|
485
|
+
- [ ] All scenarios have data sources
|
|
486
|
+
- [ ] **Workflow step contracts defined for each step**
|
|
487
|
+
- [ ] **Each contract has explicit preconditions**
|
|
488
|
+
- [ ] **Each contract has explicit postconditions**
|
|
489
|
+
- [ ] **Dependencies between steps documented**
|
|
490
|
+
- [ ] **Teams can work in parallel based on contracts**
|
|
491
|
+
|
|
492
|
+
### CRITICAL: Event vs Read Model Validation
|
|
493
|
+
- [ ] **Reviewed every "calculated event"**: Is it a domain fact or pure calculation?
|
|
494
|
+
- [ ] **No aggregation events**: Totals, averages, counts are read models, NOT events
|
|
495
|
+
- [ ] **Recalculated state identified**: If a value changes multiple times, it's a read model
|
|
496
|
+
- [ ] **Processor outputs categorized**:
|
|
497
|
+
- [ ] Facts → Events (e.g., PaymentAuthorized)
|
|
498
|
+
- [ ] Calculations → Read Models (e.g., SellerRatingCalculated)
|
|
499
|
+
- [ ] Notifications → No event/model (info-only)
|
|
500
|
+
- [ ] **History tracking correct**: Read models track history in `history[]`, not as separate events
|
|
501
|
+
|
|
502
|
+
## Completeness Criteria
|
|
503
|
+
|
|
504
|
+
The model is **complete** when:
|
|
505
|
+
Every event field has a source (command or system or is marked as generated)
|
|
506
|
+
Every command input becomes event/state data
|
|
507
|
+
Every read model field has event source
|
|
508
|
+
All state transitions are covered
|
|
509
|
+
Alternative flows are documented
|
|
510
|
+
Error conditions are handled
|
|
511
|
+
System boundaries are clear
|
|
512
|
+
No "magic" data appears without source
|
|
513
|
+
Data flows logically end-to-end
|
|
514
|
+
All stakeholder needs are met
|
|
515
|
+
**Events are facts (immutable domain actions)** **Read models are projections (derived/calculated state)** **No calculated events exist** (aggregations/totals are read models)
|
|
516
|
+
**Every COMMAND/READMODEL column has a slice defined**, except linked copies
|
|
517
|
+
|
|
518
|
+
## Common Incompleteness Issues
|
|
519
|
+
|
|
520
|
+
| Issue | Example | Fix |
|
|
521
|
+
|-------|---------|-----|
|
|
522
|
+
| Missing event | "No event for failure" | Add failure event |
|
|
523
|
+
| Orphaned data | "Field in view, not in event" | Add field to event |
|
|
524
|
+
| Circular flow | "A needs B, B needs A" | Redesign boundary |
|
|
525
|
+
| Missing field | "View needs date, event has none" | Add field to event |
|
|
526
|
+
| Unclear origin | "Where does this come from?" | Trace back to source |
|
|
527
|
+
| **Calculated event** | SellerRatingCalculated, InventoryTotal | **Move to read model** (recalculated state is projection) |
|
|
528
|
+
| **False duplicate** | Two nodes share a title | Check `data.linkedTo` on both before reporting — a linked copy is intentional, not a gap |
|
|
529
|
+
| **Missing slice** | COMMAND/READMODEL column with no SLICE_BORDER | Define a slice for that column (unless it's a linked copy) |
|
|
530
|
+
|
|
531
|
+
## Reference Documentation
|
|
532
|
+
|
|
533
|
+
- **[Security Analysis with Event Modeling](references/security-analysis-with-event-modeling.md)** — How to use the field traceability matrix and data flow visibility from this step to conduct a systematic security review: identifying trust boundaries, privilege escalation paths, and data exposure risks across the event model.
|
|
534
|
+
|
|
535
|
+
## Next Steps
|
|
536
|
+
|
|
537
|
+
If completeness check passes:
|
|
538
|
+
→ Proceed to code generation
|
|
539
|
+
|
|
540
|
+
If gaps found:
|
|
541
|
+
→ Return to appropriate step to fix
|
|
542
|
+
→ Re-run completeness check
|