archsight 0.3.1 → 0.3.3
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.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +1 -1
- data/README.md +6 -1
- data/docs/icons.md +29 -2
- data/docs/index.md.erb +22 -4
- data/docs/modeling.md +268 -6
- data/docs/pages.md +12 -3
- data/docs/search.md +9 -2
- data/docs/togaf.md +8 -1
- data/lib/archsight/annotations/asset_annotations.rb +34 -0
- data/lib/archsight/annotations/relation_resolver.rb +15 -6
- data/lib/archsight/annotations/risk_annotations.rb +21 -0
- data/lib/archsight/cli.rb +6 -0
- data/lib/archsight/database.rb +57 -3
- data/lib/archsight/diagram.rb +7 -0
- data/lib/archsight/documentation.rb +10 -6
- data/lib/archsight/editor.rb +2 -2
- data/lib/archsight/helpers/requirements_blocks.rb +1 -1
- data/lib/archsight/helpers/resource_resolver.rb +1 -1
- data/lib/archsight/helpers/wiki_links.rb +11 -0
- data/lib/archsight/linter.rb +110 -0
- data/lib/archsight/mcp/analyze_resource_tool.rb +2 -2
- data/lib/archsight/mcp/resource_doc_tool.rb +2 -2
- data/lib/archsight/query/ast.rb +2 -1
- data/lib/archsight/query/evaluator.rb +2 -2
- data/lib/archsight/references.rb +129 -0
- data/lib/archsight/requirements.rb +4 -4
- data/lib/archsight/resources/application_component.rb +11 -1
- data/lib/archsight/resources/application_event.rb +79 -0
- data/lib/archsight/resources/application_interface.rb +1 -1
- data/lib/archsight/resources/application_service.rb +10 -5
- data/lib/archsight/resources/base.rb +40 -5
- data/lib/archsight/resources/business_actor.rb +9 -1
- data/lib/archsight/resources/business_control.rb +88 -0
- data/lib/archsight/resources/business_event.rb +79 -0
- data/lib/archsight/resources/business_process.rb +11 -3
- data/lib/archsight/resources/business_product.rb +2 -2
- data/lib/archsight/resources/business_role.rb +69 -0
- data/lib/archsight/resources/compliance_evidence.rb +44 -3
- data/lib/archsight/resources/data_object.rb +7 -2
- data/lib/archsight/resources/implementation_deliverable.rb +62 -0
- data/lib/archsight/resources/implementation_event.rb +52 -0
- data/lib/archsight/resources/implementation_gap.rb +49 -0
- data/lib/archsight/resources/implementation_plateau.rb +61 -0
- data/lib/archsight/resources/implementation_work_package.rb +83 -0
- data/lib/archsight/resources/motivation_assessment.rb +121 -0
- data/lib/archsight/resources/{business_constraint.rb → motivation_constraint.rb} +11 -5
- data/lib/archsight/resources/motivation_driver.rb +50 -0
- data/lib/archsight/resources/motivation_goal.rb +14 -2
- data/lib/archsight/resources/motivation_principle.rb +75 -0
- data/lib/archsight/resources/{business_requirement.rb → motivation_requirement.rb} +27 -7
- data/lib/archsight/resources/motivation_stakeholder.rb +9 -2
- data/lib/archsight/resources/page.rb +5 -0
- data/lib/archsight/resources/strategy_capability.rb +2 -2
- data/lib/archsight/resources/technology_event.rb +80 -0
- data/lib/archsight/resources/technology_node.rb +8 -2
- data/lib/archsight/resources/technology_service.rb +3 -3
- data/lib/archsight/resources/technology_system_software.rb +3 -3
- data/lib/archsight/resources.rb +34 -3
- data/lib/archsight/template.rb +2 -2
- data/lib/archsight/version.rb +1 -1
- data/lib/archsight/web/api/docs.rb +1 -1
- data/lib/archsight/web/api/json_helpers.rb +14 -10
- data/lib/archsight/web/api/openapi/spec.yaml +2 -2
- data/lib/archsight/web/api/page_helpers.rb +8 -7
- data/lib/archsight/web/api/routes.rb +1 -1
- data/lib/archsight/web/application.rb +6 -1
- data/lib/archsight/web/public/vue/{ApiDocsPage-D-cPRZCT.js → ApiDocsPage-BgqnQgwa.js} +1 -1
- data/lib/archsight/web/public/vue/{DocPage-DK6vNDbF.js → DocPage-CNO71nBH.js} +1 -1
- data/lib/archsight/web/public/vue/{EditorPage-BoJpQaVw.js → EditorPage-DR0FCNTz.js} +1 -1
- data/lib/archsight/web/public/vue/{ErrorPage-PGyjdtEf.js → ErrorPage-BfYArv6s.js} +1 -1
- data/lib/archsight/web/public/vue/{GraphView-BLiKR4zP.js → GraphView-BVTW30Ak.js} +1 -1
- data/lib/archsight/web/public/vue/HomePage-Wk9P4Pma.js +2 -0
- data/lib/archsight/web/public/vue/InstanceRouter-BV8ycydz.js +1 -0
- data/lib/archsight/web/public/vue/{InstanceRouter-60Tt3ZNM.css → InstanceRouter-jeavM6PW.css} +1 -1
- data/lib/archsight/web/public/vue/KindList-C8yMsN5J.js +1 -0
- data/lib/archsight/web/public/vue/{PageView-9MgHtrgl.js → PageView-BaN6TyJB.js} +1 -1
- data/lib/archsight/web/public/vue/{QueryError-D1FL1xgA.js → QueryError-D790wH-a.js} +1 -1
- data/lib/archsight/web/public/vue/ResourceList-D-66nas2.js +2 -0
- data/lib/archsight/web/public/vue/{SearchResults-DiW5XVYW.css → SearchResults-BewvsfOc.css} +1 -1
- data/lib/archsight/web/public/vue/SearchResults-CHyqIerQ.js +1 -0
- data/lib/archsight/web/public/vue/{WikiPage-CeCQBTDS.js → WikiPage-D2svpk6B.js} +3 -3
- data/lib/archsight/web/public/vue/WikiPage-DoFJ0dbW.css +1 -0
- data/lib/archsight/web/public/vue/{index-D7m61Ahx.js → index-BXXkUK1V.js} +2 -2
- data/lib/archsight/web/public/vue/index-Cov1SnzY.css +1 -0
- data/lib/archsight/web/public/vue/{useGraphviz-DweKV7Kg.js → useGraphviz-DlSnFeCL.js} +12 -0
- data/lib/archsight/web/public/vue.html +2 -2
- metadata +38 -22
- data/lib/archsight/web/public/vue/HomePage-C0lR8i2C.js +0 -2
- data/lib/archsight/web/public/vue/InstanceRouter-D3W2jJHV.js +0 -1
- data/lib/archsight/web/public/vue/KindList-BlsaRBNO.js +0 -1
- data/lib/archsight/web/public/vue/ResourceList-vkgFyeOY.js +0 -2
- data/lib/archsight/web/public/vue/SearchResults-Cl3O_OEr.js +0 -1
- data/lib/archsight/web/public/vue/WikiPage-C-8SG67a.css +0 -1
- data/lib/archsight/web/public/vue/index-Dbx3MXWG.css +0 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b601281c3dc26c95647876457b96e590146aee23b762d14034ed2ae5f0953710
|
|
4
|
+
data.tar.gz: 7c271d26e8def3f7e85d82210ebda0d45628e280c1bb58832b81f2900c3e1097
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 416c904c7b8ecc1c44527b226fe7e6c7697c03d905d855db532bb80f1bd5ff0ff1277c770947eed411a6ca7cae7dafd8e32085690d72a4235c73bd4c1f35950b
|
|
7
|
+
data.tar.gz: 9c22b78187060cdc3606b4f423a38b79f84edcee6cb1d6f1446348a9da46dc088bedb4f537c809aad28c2db33f875d490637c4dcc13b57b4ee0ccc76822a0193
|
data/CONTRIBUTING.md
CHANGED
|
@@ -84,7 +84,7 @@ class Archsight::Resources::MyResource < Archsight::Resources::Base
|
|
|
84
84
|
description: 'Custom field description',
|
|
85
85
|
enum: ['value1', 'value2']
|
|
86
86
|
|
|
87
|
-
relation :realizes, :
|
|
87
|
+
relation :realizes, :motivationRequirements, :MotivationRequirement
|
|
88
88
|
end
|
|
89
89
|
```
|
|
90
90
|
|
data/README.md
CHANGED
|
@@ -91,6 +91,11 @@ archsight web
|
|
|
91
91
|
claude mcp add --transport sse ionos-architecture http://localhost:4567/mcp/sse
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
+
For a deployed server use its address, for example `claude mcp add --transport sse archsight https://archsight.example.com/mcp/sse`.
|
|
95
|
+
The MCP endpoint accepts any hostname, like the web UI and the API, and has no authentication of its own: if the
|
|
96
|
+
ingress requires a token, pass it with `--header "Authorization: Bearer <token>"`. The ingress must not buffer or
|
|
97
|
+
time out the long-lived SSE connection.
|
|
98
|
+
|
|
94
99
|
**Available tools:**
|
|
95
100
|
|
|
96
101
|
- `query` - Search and filter resources using the query language
|
|
@@ -101,7 +106,7 @@ claude mcp add --transport sse ionos-architecture http://localhost:4567/mcp/sse
|
|
|
101
106
|
|
|
102
107
|
**Macros** such as `{status:yellow WIP}` and `{emoticon:2705}` work inline in pages ([Wiki pages](docs/pages.md#macros)).
|
|
103
108
|
|
|
104
|
-
**Views and analyses** can be embedded in pages with `![[View/Name]]` / `![[Analysis/Name]]` ([Wiki pages](docs/pages.md#embedding-views-and-analyses)); a view can also be written in place with a ```` ```view ```` block ([inline views](docs/pages.md#inline-views)), and the
|
|
109
|
+
**Views and analyses** can be embedded in pages with `![[View/Name]]` / `![[Analysis/Name]]` ([Wiki pages](docs/pages.md#embedding-views-and-analyses)); a view can also be written in place with a ```` ```view ```` block ([inline views](docs/pages.md#inline-views)), and the requirements of a selection of resources shown with a ```` ```requirements ```` block ([requirements](docs/pages.md#requirements-of-a-selection-of-resources)).
|
|
105
110
|
|
|
106
111
|
**Images and draw.io diagrams** are plain files in the resources directory and are embedded in markdown with relative
|
|
107
112
|
paths (``, ``); only files of image, draw.io and `.asd` diagram types inside the resources
|
data/docs/icons.md
CHANGED
|
@@ -11,24 +11,51 @@ Current icon assignments for each resource type:
|
|
|
11
11
|
| ApplicationInterface | `usb` | <i class="iconoir-usb"></i> |
|
|
12
12
|
| ApplicationService | `cube` | <i class="iconoir-cube"></i> |
|
|
13
13
|
| BusinessActor | `community` | <i class="iconoir-community"></i> |
|
|
14
|
-
|
|
|
14
|
+
| ApplicationEvent | `bell-notification` | <i class="iconoir-bell-notification"></i> |
|
|
15
|
+
| BusinessControl | `shield-search` | <i class="iconoir-shield-search"></i> |
|
|
16
|
+
| BusinessEvent | `flash` | <i class="iconoir-flash"></i> |
|
|
17
|
+
| BusinessRole | `user-badge-check` | <i class="iconoir-user-badge-check"></i> |
|
|
15
18
|
| BusinessProcess | `kanban-board` | <i class="iconoir-kanban-board"></i> |
|
|
16
19
|
| BusinessProduct | `box-iso` | <i class="iconoir-box-iso"></i> |
|
|
17
|
-
| BusinessRequirement | `task-list` | <i class="iconoir-task-list"></i> |
|
|
18
20
|
| ComplianceEvidence | `shield-check` | <i class="iconoir-shield-check"></i> |
|
|
19
21
|
| DataObject | `database` | <i class="iconoir-database"></i> |
|
|
20
22
|
| ApplicationComponent | `component` | <i class="iconoir-component"></i> |
|
|
21
23
|
| TechnologySystemSoftware | `terminal-tag` | <i class="iconoir-terminal-tag"></i> |
|
|
24
|
+
| MotivationAssessment | `stats-up-square` | <i class="iconoir-stats-up-square"></i> |
|
|
25
|
+
| MotivationDriver | `fire-flame` | <i class="iconoir-fire-flame"></i> |
|
|
26
|
+
| ImplementationDeliverable | `package` | <i class="iconoir-package"></i> |
|
|
27
|
+
| ImplementationEvent | `calendar-check` | <i class="iconoir-calendar-check"></i> |
|
|
28
|
+
| ImplementationGap | `git-compare` | <i class="iconoir-git-compare"></i> |
|
|
29
|
+
| ImplementationPlateau | `packages` | <i class="iconoir-packages"></i> |
|
|
30
|
+
| ImplementationWorkPackage | `hammer` | <i class="iconoir-hammer"></i> |
|
|
22
31
|
| MotivationGoal | `archery` | <i class="iconoir-archery"></i> |
|
|
23
32
|
| MotivationOutcome | `badge-check` | <i class="iconoir-badge-check"></i> |
|
|
33
|
+
| MotivationPrinciple | `book` | <i class="iconoir-book"></i> |
|
|
34
|
+
| MotivationRequirement | `task-list` | <i class="iconoir-task-list"></i> |
|
|
35
|
+
| MotivationConstraint | `prohibition` | <i class="iconoir-prohibition"></i> |
|
|
24
36
|
| MotivationStakeholder | `user-crown` | <i class="iconoir-user-crown"></i> |
|
|
25
37
|
| TechnologyNode | `server-connection` | <i class="iconoir-server-connection"></i> |
|
|
26
38
|
| StrategyCapability | `strategy` | <i class="iconoir-strategy"></i> |
|
|
27
39
|
| TechnologyArtifact | `puzzle` | <i class="iconoir-puzzle"></i> |
|
|
40
|
+
| TechnologyEvent | `warning-triangle` | <i class="iconoir-warning-triangle"></i> |
|
|
28
41
|
| TechnologyInterface | `data-transfer-both` | <i class="iconoir-data-transfer-both"></i> |
|
|
29
42
|
| TechnologyService | `cloud` | <i class="iconoir-cloud"></i> |
|
|
30
43
|
| View | `view-grid` | <i class="iconoir-view-grid"></i> |
|
|
31
44
|
|
|
45
|
+
## Layer Colours
|
|
46
|
+
|
|
47
|
+
Icons and graph nodes take the colour of their layer.
|
|
48
|
+
|
|
49
|
+
| Layer | Colour | Graph (light) | Icon |
|
|
50
|
+
|-------|--------|---------------|------|
|
|
51
|
+
| Strategy | orange | `#F4A261` | `#D4824A` |
|
|
52
|
+
| Motivation | purple | `#CE93D8` | `#AB47BC` |
|
|
53
|
+
| Business | yellow | `#F9DC5C` | `#D4B83C` |
|
|
54
|
+
| Application | blue | `#6CBEED` | `#4A9ECD` |
|
|
55
|
+
| Technology | green | `#8AC926` | `#7AB316` |
|
|
56
|
+
| Implementation & Migration | rose | `#F48FB1` | `#E0527F` |
|
|
57
|
+
| Other | gray | `#CCCCCC` | `#999999` |
|
|
58
|
+
|
|
32
59
|
## Icon Categories
|
|
33
60
|
|
|
34
61
|
### Technology & Development
|
data/docs/index.md.erb
CHANGED
|
@@ -24,21 +24,27 @@ The following diagram shows all resource types organized by layer and their rela
|
|
|
24
24
|
|
|
25
25
|
### Motivation Layer
|
|
26
26
|
|
|
27
|
-
Resources representing stakeholders, goals, and
|
|
27
|
+
Resources representing stakeholders, goals, outcomes, requirements, and constraints that drive architectural decisions.
|
|
28
28
|
|
|
29
29
|
- [MotivationStakeholder](/doc/resources/motivation_stakeholder) - Roles with interests in the architecture
|
|
30
30
|
- [MotivationGoal](/doc/resources/motivation_goal) - High-level statements of intent
|
|
31
31
|
- [MotivationOutcome](/doc/resources/motivation_outcome) - End results or consequences
|
|
32
|
+
- [MotivationRequirement](/doc/resources/motivation_requirement) - Compliance, legal and functional requirements
|
|
33
|
+
- [MotivationConstraint](/doc/resources/motivation_constraint) - Limitations and restrictions
|
|
34
|
+
- [MotivationDriver](/doc/resources/motivation_driver) - Threats, opportunities and other drivers
|
|
35
|
+
- [MotivationAssessment](/doc/resources/motivation_assessment) - Risks, vulnerabilities and findings
|
|
36
|
+
- [MotivationPrinciple](/doc/resources/motivation_principle) - Policies and principles
|
|
32
37
|
|
|
33
38
|
### Business Layer
|
|
34
39
|
|
|
35
|
-
Resources representing business processes, actors, and
|
|
40
|
+
Resources representing business processes, actors, products, and the controls that guide processes.
|
|
36
41
|
|
|
37
42
|
- [BusinessActor](/doc/resources/business_actor) - Teams and organizations
|
|
43
|
+
- [BusinessRole](/doc/resources/business_role) - Responsibilities that actors take on
|
|
38
44
|
- [BusinessProcess](/doc/resources/business_process) - Structured business workflows
|
|
39
45
|
- [BusinessProduct](/doc/resources/business_product) - Products offered to customers
|
|
40
|
-
- [
|
|
41
|
-
- [
|
|
46
|
+
- [BusinessControl](/doc/resources/business_control) - Controls that guide business processes
|
|
47
|
+
- [BusinessEvent](/doc/resources/business_event) - Threat events, loss events and triggers
|
|
42
48
|
|
|
43
49
|
### Strategy Layer
|
|
44
50
|
|
|
@@ -53,6 +59,7 @@ Resources representing application services, components, and interfaces.
|
|
|
53
59
|
- [ApplicationService](/doc/resources/application_service) - High-level application services
|
|
54
60
|
- [ApplicationComponent](/doc/resources/application_component) - Logical parts of services
|
|
55
61
|
- [ApplicationInterface](/doc/resources/application_interface) - APIs and interfaces between components
|
|
62
|
+
- [ApplicationEvent](/doc/resources/application_event) - Threat events, loss events and triggers of applications
|
|
56
63
|
- [DataObject](/doc/resources/data_object) - Data structures and schemas
|
|
57
64
|
|
|
58
65
|
### Technology Layer
|
|
@@ -62,9 +69,20 @@ Resources representing technology infrastructure and artifacts.
|
|
|
62
69
|
- [TechnologyService](/doc/resources/technology_service) - Infrastructure services
|
|
63
70
|
- [TechnologyArtifact](/doc/resources/technology_artifact) - Source code repositories
|
|
64
71
|
- [TechnologyInterface](/doc/resources/technology_interface) - Technical interfaces
|
|
72
|
+
- [TechnologyEvent](/doc/resources/technology_event) - Infrastructure events, scan findings and outages
|
|
65
73
|
- [TechnologySystemSoftware](/doc/resources/technology_system_software) - Logical infrastructure components
|
|
66
74
|
- [TechnologyNode](/doc/resources/technology_node) - Physical infrastructure
|
|
67
75
|
|
|
76
|
+
### Implementation & Migration Layer
|
|
77
|
+
|
|
78
|
+
Resources representing change: work, results, milestones and the states of the architecture between them.
|
|
79
|
+
|
|
80
|
+
- [ImplementationWorkPackage](/doc/resources/implementation_work_package) - Projects, measures and remediation
|
|
81
|
+
- [ImplementationDeliverable](/doc/resources/implementation_deliverable) - Results of work packages
|
|
82
|
+
- [ImplementationEvent](/doc/resources/implementation_event) - Milestones, go-lives and deadlines
|
|
83
|
+
- [ImplementationPlateau](/doc/resources/implementation_plateau) - Baseline, transition and target states
|
|
84
|
+
- [ImplementationGap](/doc/resources/implementation_gap) - Differences between plateaus
|
|
85
|
+
|
|
68
86
|
### Other
|
|
69
87
|
|
|
70
88
|
- [ComplianceEvidence](/doc/resources/compliance_evidence) - Evidence for compliance requirements
|
data/docs/modeling.md
CHANGED
|
@@ -18,6 +18,34 @@ Application Layer What software supports the business
|
|
|
18
18
|
Technology Layer How software is built and deployed
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
+
## Direction of Relations
|
|
22
|
+
|
|
23
|
+
Model and read the architecture **top-down**: Motivation, Strategy, Business, Application, Technology; the
|
|
24
|
+
Implementation & Migration layer describes change across all of them. A relation is written on an element and points
|
|
25
|
+
to what that element depends on, is served by, or is answered by. Following relations from a high-level element
|
|
26
|
+
therefore walks down to people, code and infrastructure, and the relations form a DAG: nothing may lead back to where
|
|
27
|
+
it started. `archsight lint` reports every cycle (only `dependsOn` is exempt, because components may depend on each
|
|
28
|
+
other at runtime).
|
|
29
|
+
|
|
30
|
+
There are two families of verbs:
|
|
31
|
+
|
|
32
|
+
| Family | Verbs | Written on | Points to |
|
|
33
|
+
|--------|-------|------------|-----------|
|
|
34
|
+
| Responsibility and provider (down) | `performedBy`, `ownedBy`, `executedBy`, `servedBy`, `guidedBy`, `maintainedBy`, `contributedBy`, `hasConcern`, `realizedThrough`, `exposes`, `mitigatedBy`, `influences`, `triggers`, `affects`, `assesses`, `contains`, `closedBy`, `compares` | the element that needs, uses or is concerned with something | what provides it or is responsible for it |
|
|
35
|
+
| Realization (up) | `realizes`, `partiallyRealizes`, `plans`, `satisfies`, `evidencedBy` (on the evidenced element), `provides` | the concrete element | the abstract element it answers to (requirement, goal, capability, plateau) |
|
|
36
|
+
|
|
37
|
+
Rules:
|
|
38
|
+
|
|
39
|
+
- A pair of kinds never has the same relation in both directions: a goal `realizes` a requirement, a requirement does not
|
|
40
|
+
`realize` a goal. Reverse relations are shown for free as incoming relations.
|
|
41
|
+
- Responsibility ends at the actor: process, control, risk, policy, work package point to a `BusinessRole`, the role
|
|
42
|
+
points to the `BusinessActor` that holds it, and the actor points to nothing further.
|
|
43
|
+
- The docs draw realization chains top-down ("Requirement, down to Service") while the data is stored on the concrete
|
|
44
|
+
element, so the file of a service says what it realizes.
|
|
45
|
+
- `mentions` and `depicts` are not part of this structure. They are derived from the text and diagrams of a resource
|
|
46
|
+
(never written in a file) and show how things are linked sideways, in prose and pictures. They neither follow nor
|
|
47
|
+
contradict the direction above and are left out of the cycle check.
|
|
48
|
+
|
|
21
49
|
## Starting Points
|
|
22
50
|
|
|
23
51
|
### Top-Down Modeling
|
|
@@ -52,6 +80,11 @@ Model **why** the architecture exists.
|
|
|
52
80
|
| MotivationStakeholder | For roles that have interest in architecture outcomes (CTO, Security Team, Customers) |
|
|
53
81
|
| MotivationGoal | For high-level objectives ("Achieve SOC 2 compliance", "Reduce latency") |
|
|
54
82
|
| MotivationOutcome | For measurable results ("99.9% availability", "Sub-100ms response") |
|
|
83
|
+
| MotivationRequirement | For must-have capabilities (compliance, functional needs) |
|
|
84
|
+
| MotivationConstraint | For limitations (budget, regulations, technical debt) |
|
|
85
|
+
| MotivationDriver | For threats, opportunities, regulation and market forces that motivate action (`driver/type`) |
|
|
86
|
+
| MotivationAssessment | For risks, vulnerabilities, findings and supplier or protection-need analyses (`assessment/type`) |
|
|
87
|
+
| MotivationPrinciple | For policies, guidelines and architecture principles (`principle/type`) |
|
|
55
88
|
|
|
56
89
|
**Example chain:** Stakeholder "Security Team" → hasConcern → Goal "Achieve Compliance" → realizes → Requirement "Encrypt data at rest"
|
|
57
90
|
|
|
@@ -62,12 +95,33 @@ Model **who** does **what** in business terms.
|
|
|
62
95
|
| Resource | When to Use |
|
|
63
96
|
|----------|-------------|
|
|
64
97
|
| BusinessActor | For teams, departments, or organizations |
|
|
98
|
+
| BusinessRole | For responsibilities held by actors: control owner, risk owner, information security officer (`role/type`) |
|
|
65
99
|
| BusinessProcess | For workflows that produce business value |
|
|
66
100
|
| BusinessProduct | For offerings to customers (cloud services, APIs) |
|
|
67
|
-
|
|
|
68
|
-
|
|
|
101
|
+
| BusinessControl | For controls that guide a process (access review, change approval), with an owner and executors |
|
|
102
|
+
| BusinessEvent | For things that happen in the business: threat events, loss events, incidents, triggers (`event/type`) |
|
|
103
|
+
|
|
104
|
+
**Example chain:** Process "Incident Response" → performedBy → Actor "Platform Team"; Process "Incident Response" → servedBy → Service "Monitoring"
|
|
105
|
+
|
|
106
|
+
**Roles:** Process "Incident Response" → performedBy → Role "Incident Manager" → performedBy → Actor "Platform Team". Controls, risks, policies and work packages use `ownedBy` (and controls `executedBy`) the same way. Use a role where the responsibility has a name of its own and should survive a change of team; pointing straight at an actor stays valid.
|
|
107
|
+
|
|
108
|
+
**Controls:** Process "Incident Response" → guidedBy → Control "Escalation Review" → ownedBy / executedBy → Role or Actor. How controls, requirements and evidence fit together is described under Relation Patterns below.
|
|
69
109
|
|
|
70
|
-
|
|
110
|
+
### Implementation & Migration Layer
|
|
111
|
+
|
|
112
|
+
Model **change**: what is done, what it delivers and how the architecture looks before and after.
|
|
113
|
+
|
|
114
|
+
| Resource | When to Use |
|
|
115
|
+
|----------|-------------|
|
|
116
|
+
| ImplementationWorkPackage | For projects, measures, remediation of risks and findings, audit programmes (`workpackage/type`, status, due date) |
|
|
117
|
+
| ImplementationDeliverable | For the results of work packages: documents, systems, process changes, evidence (`deliverable/type`) |
|
|
118
|
+
| ImplementationEvent | For milestones, go-lives and deadlines (`event/type`) |
|
|
119
|
+
| ImplementationPlateau | For a state of the architecture: baseline, transition, target (`plateau/type`) |
|
|
120
|
+
| ImplementationGap | For the difference between two plateaus (`gap/status`, `gap/impact`) |
|
|
121
|
+
|
|
122
|
+
**Migration path:** Plateau "Baseline" → triggers → Plateau "Target"; Gap → compares → both plateaus; Work Package → realizes → Deliverable → realizes → Plateau "Target"; Gap → closedBy → Work Package.
|
|
123
|
+
|
|
124
|
+
**Remediation:** Assessment "Risk" → mitigatedBy → Work Package → realizes → Deliverable (type `evidence`) → realizes → ComplianceEvidence. Group by `risk/domain` to see the plan of one domain, filter by `workpackage/status` and `workpackage/due` for what is open or late.
|
|
71
125
|
|
|
72
126
|
### Strategy Layer
|
|
73
127
|
|
|
@@ -114,7 +168,7 @@ Model **infrastructure** and **code**.
|
|
|
114
168
|
Shows how abstract concepts become concrete:
|
|
115
169
|
|
|
116
170
|
```
|
|
117
|
-
|
|
171
|
+
MotivationRequirement
|
|
118
172
|
↓ realizes
|
|
119
173
|
ApplicationService
|
|
120
174
|
↓ realizedThrough
|
|
@@ -135,12 +189,157 @@ TechnologyService
|
|
|
135
189
|
TechnologySystemSoftware
|
|
136
190
|
```
|
|
137
191
|
|
|
192
|
+
### Requirements, Controls and Evidence
|
|
193
|
+
|
|
194
|
+
A requirement is the point where the process side and the application side of compliance meet:
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
Process side Application side
|
|
198
|
+
|
|
199
|
+
BusinessProcess ApplicationService / ApplicationComponent
|
|
200
|
+
↓ guidedBy ↓ realizes / plans
|
|
201
|
+
BusinessControl ↓ evidencedBy
|
|
202
|
+
↓ satisfies ComplianceEvidence
|
|
203
|
+
↓ ↓ satisfies
|
|
204
|
+
└────────────→ MotivationRequirement ←────────┘
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
| Kind | Answers | Key relations |
|
|
208
|
+
|------|---------|---------------|
|
|
209
|
+
| MotivationRequirement | What must hold? | satisfied by controls and evidence; realized or planned by applications |
|
|
210
|
+
| BusinessControl | What do we do about it, who does it, how often? | a process is `guidedBy` it; `ownedBy` and `executedBy` actors; `satisfies` requirements; `evidencedBy` evidence |
|
|
211
|
+
| ComplianceEvidence | How is it met, how can it be shown? | `satisfies` requirements; `evidencedBy` from an application, a technology element or a control |
|
|
212
|
+
|
|
213
|
+
How to model it:
|
|
214
|
+
|
|
215
|
+
- **Process side.** Model a control once, let every process it governs point to it with `guidedBy`, and link it with `satisfies` to each requirement it addresses. Give it an owner (the accountable actor) and executors (the actors carrying it out). The `control/status` and `control/frequency` filters find, for example, the controls that are only partially implemented.
|
|
216
|
+
- **Application side.** Whether an application implements a requirement is stated on the application (`realizes`, `plans`, `evidencedBy`), never on the control. Evidence is per resource and requirement: it says how *this* service or component meets *that* requirement.
|
|
217
|
+
- **Evidence of a control.** A control can be `evidencedBy` evidence too. Use it for the records the control itself produces (reviews, diagrams, change history, audit logs) and set `evidence/type` to `process`, `documentation` or `audit-log`. Evidence that an application meets a requirement is linked from the application, not from a control.
|
|
218
|
+
- **Reading it back.** A requirement's page lists its controls and evidence as incoming `satisfies` relations. The "Requirements" table of an application page and the `requirements` blocks list what applications implement (`realizes`, `partiallyRealizes`, `plans`); controls are not part of that table.
|
|
219
|
+
|
|
220
|
+
```yaml
|
|
221
|
+
# process side
|
|
222
|
+
kind: BusinessProcess
|
|
223
|
+
metadata: { name: Process:ChangeManagement }
|
|
224
|
+
spec:
|
|
225
|
+
guidedBy:
|
|
226
|
+
businessControls: [Control:ChangeApproval]
|
|
227
|
+
---
|
|
228
|
+
kind: BusinessControl
|
|
229
|
+
metadata: { name: Control:ChangeApproval }
|
|
230
|
+
spec:
|
|
231
|
+
ownedBy: { businessActors: [Team:Management] }
|
|
232
|
+
executedBy: { businessActors: [Team:Operations] }
|
|
233
|
+
satisfies: { motivationRequirements: [Requirement:ChangeTraceability] }
|
|
234
|
+
---
|
|
235
|
+
# application side
|
|
236
|
+
kind: ApplicationService
|
|
237
|
+
metadata: { name: Deployment }
|
|
238
|
+
spec:
|
|
239
|
+
realizes: { motivationRequirements: [Requirement:ChangeTraceability] }
|
|
240
|
+
evidencedBy: { complianceEvidences: [Evidence:DeploymentAuditLog] }
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Security and Risk
|
|
244
|
+
|
|
245
|
+
Security and risk are modelled with the elements above, following the risk and security overlay of the Open Group
|
|
246
|
+
white paper [Modeling Enterprise Risk Management and Security with the ArchiMate Language](#reference). There is no
|
|
247
|
+
separate security layer: a concept is an ordinary element that carries a **type** (a specialization, the paper's
|
|
248
|
+
"stereotype") plus profile annotations. The type is a filterable annotation, so views, queries and lists can group by it.
|
|
249
|
+
|
|
250
|
+
| Security concept | Kind | Type annotation | Notes |
|
|
251
|
+
|------------------|------|-----------------|-------|
|
|
252
|
+
| Threat (circumstance) | `MotivationDriver` | `driver/type: threat` | also opportunity, regulation, market |
|
|
253
|
+
| Threat agent | `BusinessActor`, `ApplicationComponent`, `TechnologyNode` | none | the `causedBy` of an event |
|
|
254
|
+
| Threat event | `BusinessEvent`, `ApplicationEvent`, `TechnologyEvent` | `event/type: threat-event` or `attack` | `attack` = intentional |
|
|
255
|
+
| Loss event, incident | the three event kinds | `event/type: loss-event` or `incident` | the layer says where it happens |
|
|
256
|
+
| Risk | `MotivationAssessment` | `assessment/type: risk` | initial and residual profile, `risk/treatment` |
|
|
257
|
+
| Vulnerability | `MotivationAssessment` | `assessment/type: vulnerability` | `assesses` the assets it is found on |
|
|
258
|
+
| Control objective | `MotivationGoal` | `goal/type: control-objective` | the risk is `mitigatedBy` it |
|
|
259
|
+
| Control measure | `MotivationRequirement` | `requirement/type: control-measure` | a goal `realizes` it; the risk can be `mitigatedBy` it |
|
|
260
|
+
| Control implementation | `BusinessControl`, applications, nodes, processes | none | `satisfies` / `realizes` the measure |
|
|
261
|
+
| Proof of the control | `ComplianceEvidence` | `evidence/type` | `evidence/status: not-applicable` where the requirement does not apply |
|
|
262
|
+
| Asset at risk | any application, technology, data or process kind | `asset/value`, `asset/confidentiality`, `asset/integrity`, `asset/availability` | the protection need (BSI Schutzbedarf) |
|
|
263
|
+
| Policy (design level) | `MotivationPrinciple` | `principle/type: security-policy` or `risk-policy` | status, validity, framework mapping |
|
|
264
|
+
| Operational policy, regulation | `MotivationConstraint` | none | the paper has no element for operational policy |
|
|
265
|
+
| Risk domain | none; annotation `risk/domain` | `risk/domain`, `risk/category` | group by it with a query or a `View` |
|
|
266
|
+
|
|
267
|
+
The chain, as in the paper's Coldhard Steel example:
|
|
268
|
+
|
|
269
|
+
```
|
|
270
|
+
MotivationDriver (threat) ──influences──→ MotivationAssessment (risk) ──mitigatedBy──→ MotivationGoal (control objective)
|
|
271
|
+
│ triggers │ assesses │ realizes
|
|
272
|
+
↓ ↓ ↓
|
|
273
|
+
BusinessEvent (loss event) ←──influences── MotivationAssessment (vulnerability) MotivationRequirement (control measure)
|
|
274
|
+
↑ triggers ↑ satisfies / realizes
|
|
275
|
+
TechnologyEvent / ApplicationEvent (threat event, attack) BusinessControl / asset ──evidencedBy──→ ComplianceEvidence
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
```yaml
|
|
279
|
+
kind: MotivationDriver
|
|
280
|
+
metadata: { name: Threat:Intrusion, annotations: { driver/type: threat } }
|
|
281
|
+
spec:
|
|
282
|
+
influences: { motivationAssessments: [Risk:Intrusion] }
|
|
283
|
+
triggers: { businessEvents: [Loss:DataLeak] }
|
|
284
|
+
---
|
|
285
|
+
kind: MotivationAssessment
|
|
286
|
+
metadata:
|
|
287
|
+
name: Risk:Intrusion
|
|
288
|
+
annotations:
|
|
289
|
+
assessment/type: risk
|
|
290
|
+
risk/initial-likelihood: high
|
|
291
|
+
risk/residual-likelihood: low
|
|
292
|
+
risk/treatment: mitigate
|
|
293
|
+
risk/domain: customer-data
|
|
294
|
+
spec:
|
|
295
|
+
ownedBy: { businessRoles: [Role:RiskOwner] }
|
|
296
|
+
assesses: { technologyNodes: [Node:Web1] }
|
|
297
|
+
mitigatedBy: { goals: [Objective:ReduceExposure], businessControls: [Control:FirewallReview] }
|
|
298
|
+
---
|
|
299
|
+
kind: MotivationGoal
|
|
300
|
+
metadata: { name: Objective:ReduceExposure, annotations: { goal/type: control-objective } }
|
|
301
|
+
spec:
|
|
302
|
+
realizes: { motivationRequirements: [Measure:Firewall] }
|
|
303
|
+
---
|
|
304
|
+
kind: MotivationRequirement
|
|
305
|
+
metadata: { name: Measure:Firewall, annotations: { requirement/type: control-measure } }
|
|
306
|
+
spec: {}
|
|
307
|
+
---
|
|
308
|
+
kind: BusinessControl
|
|
309
|
+
metadata: { name: Control:FirewallReview }
|
|
310
|
+
spec:
|
|
311
|
+
ownedBy: { businessRoles: [Role:ControlOwner] }
|
|
312
|
+
satisfies: { motivationRequirements: [Measure:Firewall] }
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
How to model it:
|
|
316
|
+
|
|
317
|
+
- **Events and their types.** A threat event `triggers` a loss event; the three event kinds (business, application,
|
|
318
|
+
technology) say on which level it happens and a technology event may trigger an application or business event. Use
|
|
319
|
+
`event/type` to tell threat events, attacks, loss events, incidents, opportunity events, audits, scans and changes apart.
|
|
320
|
+
- **Vulnerability scan.** One `MotivationAssessment` of type `vulnerability` per finding, `assesses` every node it was
|
|
321
|
+
found on, `influences` the loss events and risks it makes possible. Business impact follows from the model: the node
|
|
322
|
+
serves services, services serve processes.
|
|
323
|
+
- **Grouping (risk domains).** ArchiMate has no domain element; set `risk/domain` (and `risk/category`: hazard,
|
|
324
|
+
financial, operational, strategic, compliance, security) on events, assessments, drivers, requirements, controls and
|
|
325
|
+
assets, and query or build a `View` per domain to see its threats, risks, measures and assets together.
|
|
326
|
+
- **Policies.** The text of a policy is a `Page`; the structured statement (owner, validity, status, framework) is a
|
|
327
|
+
`MotivationPrinciple` that links to the page with `[[Page]]`.
|
|
328
|
+
- **Initial and residual risk.** Record both on the assessment (`risk/initial-*`, `risk/residual-*`) and the decision
|
|
329
|
+
in `risk/treatment`.
|
|
330
|
+
|
|
331
|
+
<a id="reference"></a>
|
|
332
|
+
**Reference:** Band, Engelsman, Feltus, González Paredes, Hietala, Jonkers, Massart,
|
|
333
|
+
[Modeling Enterprise Risk Management and Security with the ArchiMate Language](https://pure.unamur.be/ws/files/12366722/Modeling_Enterprise_Risk_Management_and_Secutity_with_the_ArchiMate_Language.pdf),
|
|
334
|
+
The Open Group white paper (ArchiMate 2.1). For the NIST OSCAL vocabulary used for names of assessment and evidence
|
|
335
|
+
fields see [OSCAL](https://pages.nist.gov/OSCAL/learn/concepts/layer/).
|
|
336
|
+
|
|
138
337
|
### Compliance Chain
|
|
139
338
|
|
|
140
339
|
Shows how requirements are satisfied:
|
|
141
340
|
|
|
142
341
|
```
|
|
143
|
-
|
|
342
|
+
MotivationRequirement
|
|
144
343
|
↑ satisfies
|
|
145
344
|
ComplianceEvidence
|
|
146
345
|
↑ evidencedBy
|
|
@@ -151,6 +350,44 @@ Technology elements such as a Kubernetes cluster runtime can plan, realize and b
|
|
|
151
350
|
for requirements directly, so the requirement does not have to be attached to a placeholder
|
|
152
351
|
ApplicationService. Applications deployed on them point to the TechnologyService with `servedBy`.
|
|
153
352
|
|
|
353
|
+
ApplicationComponents can be evidenced as well (`realizes` / `plans motivationRequirements`, `evidencedBy
|
|
354
|
+
complianceEvidences`), so requirements can be answered per component and not only per service.
|
|
355
|
+
|
|
356
|
+
A ComplianceEvidence answers "how is the requirement met" in structured markdown fields next to
|
|
357
|
+
`architecture/description` (kept as a short summary): `evidence/mechanism`, `evidence/coverage`,
|
|
358
|
+
`evidence/operatorView` (does it hold against operators or only against other tenants),
|
|
359
|
+
`evidence/verification`, `evidence/gaps` and `evidence/sources`. Because they are separate annotations they can be
|
|
360
|
+
queried, for example `ComplianceEvidence: evidence/gaps =~ "needs review"`.
|
|
361
|
+
|
|
362
|
+
### Derived References
|
|
363
|
+
|
|
364
|
+
Text and diagrams already say which resources they are about, so archsight turns that into relations instead of asking you
|
|
365
|
+
to repeat it in YAML. There are two, and they are never written in a file:
|
|
366
|
+
|
|
367
|
+
| Relation | Comes from | Where |
|
|
368
|
+
|----------|------------|-------|
|
|
369
|
+
| `mentions` | `[[Target]]`, `[[Kind/Name]]` links and `![[View/Name]]` embeds | the content of a page, the description of any resource, any markdown annotation |
|
|
370
|
+
| `depicts` | the `resource "..."` of the nodes of a diagram | ```` ```asd ```` blocks and `` files in those texts, and the `architecture/diagram` of any resource |
|
|
371
|
+
|
|
372
|
+
```
|
|
373
|
+
Page "Architecture overview" --mentions--> ApplicationComponent "Core:Database" ([[Core:Database]])
|
|
374
|
+
Page "Architecture overview" --depicts---> ApplicationComponent "Web:API" (resource "Web:API" in a diagram)
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
They are rebuilt on every load, so they cannot drift from the text. They show on both sides: a resource lists the pages
|
|
378
|
+
that mention and depict it under Relations ("Page / mentions"), and a page lists what it refers to. Only an exact name counts: a
|
|
379
|
+
page by its name or title, `Kind/Name`, or a resource name that exists once. Part of a name, a name that exists in several
|
|
380
|
+
kinds, and an unknown name do not make a relation (`archsight lint` reports unknown links in pages). Links in code are shown as
|
|
381
|
+
written and do not count, and neither does a resource referring to itself. Views and requirements blocks pick resources with a
|
|
382
|
+
query when they run, so they name nothing.
|
|
383
|
+
|
|
384
|
+
Derived relations are followed like written ones: queries (`ApplicationComponent: <- Page`, `Page: -> ApplicationComponent`),
|
|
385
|
+
transitive queries and impact analysis. A page that mentions a component therefore shows up when you ask what a change to the
|
|
386
|
+
component affects, which tells you which pages to update, and a resource that only a page mentions is not an orphan
|
|
387
|
+
(`<- none`). To leave them out of a query, exclude the verbs: `ApplicationComponent: ~{!mentions,depicts}> TechnologyArtifact`.
|
|
388
|
+
Computed annotations (costs, teams, repositories) follow written relations only, so a link in a text never changes a number.
|
|
389
|
+
They are not part of the editor's relation form, and `mentions:` or `depicts:` in a file is an unknown verb.
|
|
390
|
+
|
|
154
391
|
## Annotation Best Practices
|
|
155
392
|
|
|
156
393
|
Use annotations to capture metadata:
|
|
@@ -194,7 +431,7 @@ relations:
|
|
|
194
431
|
### Compliance Mapping
|
|
195
432
|
|
|
196
433
|
```yaml
|
|
197
|
-
kind:
|
|
434
|
+
kind: MotivationRequirement
|
|
198
435
|
name: DataEncryption
|
|
199
436
|
annotations:
|
|
200
437
|
requirement/reference: c5-2020, gdpr-2018
|
|
@@ -204,3 +441,28 @@ relations:
|
|
|
204
441
|
outcomes:
|
|
205
442
|
- DataProtection
|
|
206
443
|
```
|
|
444
|
+
|
|
445
|
+
## Renamed Kinds
|
|
446
|
+
|
|
447
|
+
Requirements and constraints are Motivation elements in ArchiMate, so their kinds are named that way:
|
|
448
|
+
|
|
449
|
+
| Old | New |
|
|
450
|
+
|-----|-----|
|
|
451
|
+
| `BusinessRequirement` | `MotivationRequirement` |
|
|
452
|
+
| `BusinessConstraint` | `MotivationConstraint` |
|
|
453
|
+
| relation key `businessRequirements` | `motivationRequirements` |
|
|
454
|
+
| relation key `businessConstraints` | `motivationConstraints` |
|
|
455
|
+
|
|
456
|
+
Both kinds moved from the Business to the Motivation layer. Their annotations (`requirement/*`) are unchanged.
|
|
457
|
+
|
|
458
|
+
For now the old names keep working: files with `kind: BusinessRequirement` or `businessRequirements:` keys load as they are, queries such as `BusinessRequirement: requirement/priority == "must"` and `~> BusinessRequirement` still match, and old links to `/kinds/BusinessRequirement/...` still open. Everything shown (the UI, the API, files written by the inline editor) uses the new names.
|
|
459
|
+
|
|
460
|
+
`archsight lint` lists every use of an old name as a deprecation, with the file and line, without failing. Replace them, for example with a find and replace over your resources directory (YAML files and the queries in markdown pages):
|
|
461
|
+
|
|
462
|
+
```bash
|
|
463
|
+
find resources \( -name '*.yaml' -o -name '*.md' \) -exec sed -i.bak \
|
|
464
|
+
-e 's/BusinessRequirement/MotivationRequirement/g' -e 's/BusinessConstraint/MotivationConstraint/g' \
|
|
465
|
+
-e 's/businessRequirements/motivationRequirements/g' -e 's/businessConstraints/motivationConstraints/g' {} +
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
The old names will be removed in a future release.
|
data/docs/pages.md
CHANGED
|
@@ -171,14 +171,14 @@ It loads and runs in the browser like any embed; the server only writes `<div cl
|
|
|
171
171
|
data-fields data-sort data-type>` around the source. A block that is not a valid View (broken YAML, missing or
|
|
172
172
|
unparsable query, unknown `view/*` key or type) shows an error box with the source, and `archsight lint` reports it.
|
|
173
173
|
|
|
174
|
-
###
|
|
174
|
+
### Requirements of a selection of resources
|
|
175
175
|
|
|
176
|
-
The "
|
|
176
|
+
The "Requirements" table of an instance page (the requirements it `realizes`, `partiallyRealizes` or `plans`,
|
|
177
177
|
with status, priority and story) can be put on a page for any selection of resources with a ```` ```requirements ```` block:
|
|
178
178
|
|
|
179
179
|
````markdown
|
|
180
180
|
```requirements
|
|
181
|
-
title: Requirements of the backup services # optional, default "
|
|
181
|
+
title: Requirements of the backup services # optional, default "Requirements"
|
|
182
182
|
of: 'ApplicationService: name =~ "Backup"' # required: query selecting the resources
|
|
183
183
|
priority: must # optional: must, should, may (one value or a list)
|
|
184
184
|
status: [implemented, partial] # optional: implemented, partial, planned
|
|
@@ -193,6 +193,15 @@ data-status>` around the source): the frontend loads the rows from `GET /api/v1/
|
|
|
193
193
|
never runs the query. A block with a missing or unparsable `of`, an unknown key, priority or status shows an error box with the
|
|
194
194
|
source, and `archsight lint` reports it.
|
|
195
195
|
|
|
196
|
+
## What a page refers to
|
|
197
|
+
|
|
198
|
+
What a page says about the architecture becomes relations without anything to write: `[[Core:Database]]` or `[[Kind/Name]]` in the
|
|
199
|
+
text makes the page `mention` that resource, and a resource in a diagram of the page (an ```` ```asd ```` block or an embedded
|
|
200
|
+
`.asd` file) makes the page `depict` it. The resource then lists the page under Relations, and the page lists the resource, so you
|
|
201
|
+
can see which pages talk about a component, and which pages to review when it changes (impact analysis includes them). Only exact
|
|
202
|
+
names count and links in code are ignored. The same applies to the description and the diagram of every other resource. See
|
|
203
|
+
[Derived references](modeling.md#derived-references).
|
|
204
|
+
|
|
196
205
|
## Macros
|
|
197
206
|
|
|
198
207
|
Inline macros are written `{name:arguments}` and named like the macros of Confluence. They work inside a sentence, a
|
data/docs/search.md
CHANGED
|
@@ -121,7 +121,7 @@ Examples:
|
|
|
121
121
|
-> ApplicationInterface # exposes an interface
|
|
122
122
|
-> "Kubernetes:RestAPI" # exposes specific interface
|
|
123
123
|
<- ApplicationComponent # referenced by a component
|
|
124
|
-
~>
|
|
124
|
+
~> MotivationRequirement # transitively reaches requirement
|
|
125
125
|
-> none & <- none # orphan (no relations)
|
|
126
126
|
TechnologyArtifact: <- none # unreferenced artifacts
|
|
127
127
|
|
|
@@ -175,6 +175,13 @@ Examples:
|
|
|
175
175
|
# Find artifacts with NO maintainedBy relations
|
|
176
176
|
TechnologyArtifact: -{maintainedBy}> none
|
|
177
177
|
|
|
178
|
+
# Pages that mention a component, and the components they depict
|
|
179
|
+
ApplicationComponent: <{mentions}- Page
|
|
180
|
+
Page: -{depicts}> ApplicationComponent
|
|
181
|
+
|
|
182
|
+
# Leave the derived relations (links in text, nodes of diagrams) out of a traversal
|
|
183
|
+
ApplicationComponent: ~{!mentions,depicts}> TechnologyArtifact
|
|
184
|
+
|
|
178
185
|
## Sub-Query Targets
|
|
179
186
|
|
|
180
187
|
Use `$(expression)` to dynamically find relation targets based on a query:
|
|
@@ -249,7 +256,7 @@ Large Go codebases:
|
|
|
249
256
|
|
|
250
257
|
Resources with compliance chain:
|
|
251
258
|
|
|
252
|
-
~>
|
|
259
|
+
~> MotivationRequirement
|
|
253
260
|
|
|
254
261
|
Complex query with grouping:
|
|
255
262
|
|
data/docs/togaf.md
CHANGED
|
@@ -122,7 +122,14 @@ The metamodel defines architectural entities and their relationships across all
|
|
|
122
122
|
|
|
123
123
|
**Cross-Cutting:**
|
|
124
124
|
|
|
125
|
-
- **Principle**, **Constraint**, **Requirement**, **
|
|
125
|
+
- **Principle**, **Constraint**, **Requirement**, **Location**
|
|
126
|
+
- **Gap**, **Work Package**, **Deliverable**, **Plateau**, **Implementation Event**: the Implementation & Migration layer (`ImplementationGap`, `ImplementationWorkPackage`, `ImplementationDeliverable`, `ImplementationPlateau`, `ImplementationEvent`)
|
|
127
|
+
|
|
128
|
+
**Governance:**
|
|
129
|
+
|
|
130
|
+
- **Control**: a decision-making step with accountability and authority, applied to a process or function. ArchiMate has no element for it; Archsight models it as `BusinessControl`, which a `BusinessProcess` is `guidedBy`
|
|
131
|
+
|
|
132
|
+
**Risk and security:** the Open Group overlay (*Modeling Enterprise Risk Management and Security with the ArchiMate Language*) maps threats to **Driver** (`MotivationDriver`), threat and loss events to **Business/Application/Technology Event**, risks and vulnerabilities to **Assessment** (`MotivationAssessment`), control objectives to **Goal**, control measures to **Requirement** and policies to **Principle** (`MotivationPrinciple`), each with a type annotation. See [Modeling Guide](modeling.md#security-and-risk). How relations are directed (top-down, DAG) is described under [Direction of Relations](modeling.md#direction-of-relations).
|
|
126
133
|
|
|
127
134
|
### Critical Relationships
|
|
128
135
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Asset module adds the asset profile of an asset at risk: its value and its protection need (BSI "Schutzbedarf")
|
|
4
|
+
module Archsight::Annotations::Asset
|
|
5
|
+
NEED = %w[normal high very-high].freeze
|
|
6
|
+
|
|
7
|
+
def self.included(base)
|
|
8
|
+
base.class_eval do
|
|
9
|
+
annotation "asset/value",
|
|
10
|
+
description: "Value of the asset to the organization",
|
|
11
|
+
title: "Asset value",
|
|
12
|
+
enum: %w[low medium high critical],
|
|
13
|
+
filter: :word
|
|
14
|
+
|
|
15
|
+
annotation "asset/confidentiality",
|
|
16
|
+
description: "Protection need for confidentiality",
|
|
17
|
+
title: "Confidentiality need",
|
|
18
|
+
enum: Archsight::Annotations::Asset::NEED,
|
|
19
|
+
filter: :word
|
|
20
|
+
|
|
21
|
+
annotation "asset/integrity",
|
|
22
|
+
description: "Protection need for integrity",
|
|
23
|
+
title: "Integrity need",
|
|
24
|
+
enum: Archsight::Annotations::Asset::NEED,
|
|
25
|
+
filter: :word
|
|
26
|
+
|
|
27
|
+
annotation "asset/availability",
|
|
28
|
+
description: "Protection need for availability",
|
|
29
|
+
title: "Availability need",
|
|
30
|
+
enum: Archsight::Annotations::Asset::NEED,
|
|
31
|
+
filter: :word
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|