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.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +1 -1
  3. data/README.md +6 -1
  4. data/docs/icons.md +29 -2
  5. data/docs/index.md.erb +22 -4
  6. data/docs/modeling.md +268 -6
  7. data/docs/pages.md +12 -3
  8. data/docs/search.md +9 -2
  9. data/docs/togaf.md +8 -1
  10. data/lib/archsight/annotations/asset_annotations.rb +34 -0
  11. data/lib/archsight/annotations/relation_resolver.rb +15 -6
  12. data/lib/archsight/annotations/risk_annotations.rb +21 -0
  13. data/lib/archsight/cli.rb +6 -0
  14. data/lib/archsight/database.rb +57 -3
  15. data/lib/archsight/diagram.rb +7 -0
  16. data/lib/archsight/documentation.rb +10 -6
  17. data/lib/archsight/editor.rb +2 -2
  18. data/lib/archsight/helpers/requirements_blocks.rb +1 -1
  19. data/lib/archsight/helpers/resource_resolver.rb +1 -1
  20. data/lib/archsight/helpers/wiki_links.rb +11 -0
  21. data/lib/archsight/linter.rb +110 -0
  22. data/lib/archsight/mcp/analyze_resource_tool.rb +2 -2
  23. data/lib/archsight/mcp/resource_doc_tool.rb +2 -2
  24. data/lib/archsight/query/ast.rb +2 -1
  25. data/lib/archsight/query/evaluator.rb +2 -2
  26. data/lib/archsight/references.rb +129 -0
  27. data/lib/archsight/requirements.rb +4 -4
  28. data/lib/archsight/resources/application_component.rb +11 -1
  29. data/lib/archsight/resources/application_event.rb +79 -0
  30. data/lib/archsight/resources/application_interface.rb +1 -1
  31. data/lib/archsight/resources/application_service.rb +10 -5
  32. data/lib/archsight/resources/base.rb +40 -5
  33. data/lib/archsight/resources/business_actor.rb +9 -1
  34. data/lib/archsight/resources/business_control.rb +88 -0
  35. data/lib/archsight/resources/business_event.rb +79 -0
  36. data/lib/archsight/resources/business_process.rb +11 -3
  37. data/lib/archsight/resources/business_product.rb +2 -2
  38. data/lib/archsight/resources/business_role.rb +69 -0
  39. data/lib/archsight/resources/compliance_evidence.rb +44 -3
  40. data/lib/archsight/resources/data_object.rb +7 -2
  41. data/lib/archsight/resources/implementation_deliverable.rb +62 -0
  42. data/lib/archsight/resources/implementation_event.rb +52 -0
  43. data/lib/archsight/resources/implementation_gap.rb +49 -0
  44. data/lib/archsight/resources/implementation_plateau.rb +61 -0
  45. data/lib/archsight/resources/implementation_work_package.rb +83 -0
  46. data/lib/archsight/resources/motivation_assessment.rb +121 -0
  47. data/lib/archsight/resources/{business_constraint.rb → motivation_constraint.rb} +11 -5
  48. data/lib/archsight/resources/motivation_driver.rb +50 -0
  49. data/lib/archsight/resources/motivation_goal.rb +14 -2
  50. data/lib/archsight/resources/motivation_principle.rb +75 -0
  51. data/lib/archsight/resources/{business_requirement.rb → motivation_requirement.rb} +27 -7
  52. data/lib/archsight/resources/motivation_stakeholder.rb +9 -2
  53. data/lib/archsight/resources/page.rb +5 -0
  54. data/lib/archsight/resources/strategy_capability.rb +2 -2
  55. data/lib/archsight/resources/technology_event.rb +80 -0
  56. data/lib/archsight/resources/technology_node.rb +8 -2
  57. data/lib/archsight/resources/technology_service.rb +3 -3
  58. data/lib/archsight/resources/technology_system_software.rb +3 -3
  59. data/lib/archsight/resources.rb +34 -3
  60. data/lib/archsight/template.rb +2 -2
  61. data/lib/archsight/version.rb +1 -1
  62. data/lib/archsight/web/api/docs.rb +1 -1
  63. data/lib/archsight/web/api/json_helpers.rb +14 -10
  64. data/lib/archsight/web/api/openapi/spec.yaml +2 -2
  65. data/lib/archsight/web/api/page_helpers.rb +8 -7
  66. data/lib/archsight/web/api/routes.rb +1 -1
  67. data/lib/archsight/web/application.rb +6 -1
  68. data/lib/archsight/web/public/vue/{ApiDocsPage-D-cPRZCT.js → ApiDocsPage-BgqnQgwa.js} +1 -1
  69. data/lib/archsight/web/public/vue/{DocPage-DK6vNDbF.js → DocPage-CNO71nBH.js} +1 -1
  70. data/lib/archsight/web/public/vue/{EditorPage-BoJpQaVw.js → EditorPage-DR0FCNTz.js} +1 -1
  71. data/lib/archsight/web/public/vue/{ErrorPage-PGyjdtEf.js → ErrorPage-BfYArv6s.js} +1 -1
  72. data/lib/archsight/web/public/vue/{GraphView-BLiKR4zP.js → GraphView-BVTW30Ak.js} +1 -1
  73. data/lib/archsight/web/public/vue/HomePage-Wk9P4Pma.js +2 -0
  74. data/lib/archsight/web/public/vue/InstanceRouter-BV8ycydz.js +1 -0
  75. data/lib/archsight/web/public/vue/{InstanceRouter-60Tt3ZNM.css → InstanceRouter-jeavM6PW.css} +1 -1
  76. data/lib/archsight/web/public/vue/KindList-C8yMsN5J.js +1 -0
  77. data/lib/archsight/web/public/vue/{PageView-9MgHtrgl.js → PageView-BaN6TyJB.js} +1 -1
  78. data/lib/archsight/web/public/vue/{QueryError-D1FL1xgA.js → QueryError-D790wH-a.js} +1 -1
  79. data/lib/archsight/web/public/vue/ResourceList-D-66nas2.js +2 -0
  80. data/lib/archsight/web/public/vue/{SearchResults-DiW5XVYW.css → SearchResults-BewvsfOc.css} +1 -1
  81. data/lib/archsight/web/public/vue/SearchResults-CHyqIerQ.js +1 -0
  82. data/lib/archsight/web/public/vue/{WikiPage-CeCQBTDS.js → WikiPage-D2svpk6B.js} +3 -3
  83. data/lib/archsight/web/public/vue/WikiPage-DoFJ0dbW.css +1 -0
  84. data/lib/archsight/web/public/vue/{index-D7m61Ahx.js → index-BXXkUK1V.js} +2 -2
  85. data/lib/archsight/web/public/vue/index-Cov1SnzY.css +1 -0
  86. data/lib/archsight/web/public/vue/{useGraphviz-DweKV7Kg.js → useGraphviz-DlSnFeCL.js} +12 -0
  87. data/lib/archsight/web/public/vue.html +2 -2
  88. metadata +38 -22
  89. data/lib/archsight/web/public/vue/HomePage-C0lR8i2C.js +0 -2
  90. data/lib/archsight/web/public/vue/InstanceRouter-D3W2jJHV.js +0 -1
  91. data/lib/archsight/web/public/vue/KindList-BlsaRBNO.js +0 -1
  92. data/lib/archsight/web/public/vue/ResourceList-vkgFyeOY.js +0 -2
  93. data/lib/archsight/web/public/vue/SearchResults-Cl3O_OEr.js +0 -1
  94. data/lib/archsight/web/public/vue/WikiPage-C-8SG67a.css +0 -1
  95. data/lib/archsight/web/public/vue/index-Dbx3MXWG.css +0 -1
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ # ImplementationDeliverable represents a precisely defined result of a work package
4
+ class Archsight::Resources::ImplementationDeliverable < Archsight::Resources::Base
5
+ include_annotations :git, :architecture, :risk
6
+
7
+ description <<~MD
8
+ Represents a precisely defined result of a work package.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Implementation & Migration
13
+ **Aspect:** Passive Structure
14
+
15
+ A deliverable is a tangible or intangible result that a work package produces: a document, a system, a changed
16
+ process. It realizes requirements, goals and plateaus.
17
+
18
+ ## Usage
19
+
20
+ Use ImplementationDeliverable to represent:
21
+
22
+ - Documents and reports produced by a project or an audit
23
+ - Systems and process changes that go live
24
+ - The artefact that becomes compliance evidence once it exists
25
+
26
+ ## How it connects
27
+
28
+ - A `ImplementationWorkPackage` `realizes` it
29
+ - It is `ownedBy` an actor and `realizes` plateaus, requirements, goals, outcomes and `ComplianceEvidence`
30
+
31
+ ## Security and risk modelling
32
+
33
+ A deliverable of type `evidence` that `realizes` a `ComplianceEvidence` ties the plan (work package) to the proof
34
+ (evidence) of a control measure.
35
+ MD
36
+
37
+ icon "package"
38
+ layer "implementation"
39
+
40
+ annotation "deliverable/type",
41
+ description: "What kind of result this is (specialization of the deliverable)",
42
+ enum: %w[document system process-change report evidence],
43
+ filter: :word,
44
+ summary: true
45
+ annotation "deliverable/status",
46
+ description: "Where the result is",
47
+ enum: %w[planned in-progress delivered accepted],
48
+ filter: :word,
49
+ summary: true
50
+ annotation "deliverable/due",
51
+ description: "When the result is due (ISO 8601 date or time)",
52
+ title: "Due",
53
+ validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
54
+
55
+ relation :ownedBy, :businessActors, :BusinessActor
56
+ relation :ownedBy, :businessRoles, :BusinessRole
57
+ relation :realizes, :implementationPlateaus, :ImplementationPlateau
58
+ relation :realizes, :motivationRequirements, :MotivationRequirement
59
+ relation :realizes, :goals, :MotivationGoal
60
+ relation :realizes, :outcomes, :MotivationOutcome
61
+ relation :realizes, :complianceEvidences, :ComplianceEvidence
62
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ # ImplementationEvent represents a state change related to implementation or migration
4
+ class Archsight::Resources::ImplementationEvent < Archsight::Resources::Base
5
+ include_annotations :git, :architecture, :risk
6
+
7
+ description <<~MD
8
+ Represents a state change related to implementation or migration.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Implementation & Migration
13
+ **Aspect:** Behavior
14
+
15
+ An implementation event is something that happens during implementation or migration and may trigger work: a
16
+ milestone reached, a go-live, a decommissioning, a review date or a deadline.
17
+
18
+ ## Usage
19
+
20
+ Use ImplementationEvent to represent:
21
+
22
+ - Milestones and go-lives of a roadmap
23
+ - Deadlines (certification audit, end of a transition period)
24
+ - Reviews and decommissioning dates
25
+
26
+ ## How it connects
27
+
28
+ - `ownedBy` an actor
29
+ - `triggers` work packages and plateaus
30
+
31
+ Events of the running architecture (threat and loss events, incidents) are `BusinessEvent`, `ApplicationEvent`
32
+ and `TechnologyEvent`.
33
+ MD
34
+
35
+ icon "calendar-check"
36
+ layer "implementation"
37
+
38
+ annotation "event/type",
39
+ description: "What kind of event this is (specialization of the implementation event)",
40
+ enum: %w[milestone go-live decommission review deadline],
41
+ filter: :word,
42
+ summary: true
43
+ annotation "event/occurred",
44
+ description: "When the event happens or happened (ISO 8601 date or time)",
45
+ title: "Occurred",
46
+ validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
47
+
48
+ relation :ownedBy, :businessActors, :BusinessActor
49
+ relation :ownedBy, :businessRoles, :BusinessRole
50
+ relation :triggers, :implementationWorkPackages, :ImplementationWorkPackage
51
+ relation :triggers, :implementationPlateaus, :ImplementationPlateau
52
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ # ImplementationGap represents the difference between two plateaus
4
+ class Archsight::Resources::ImplementationGap < Archsight::Resources::Base
5
+ include_annotations :git, :architecture, :risk
6
+
7
+ description <<~MD
8
+ Represents a statement of difference between two plateaus.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Implementation & Migration
13
+ **Aspect:** Passive Structure
14
+
15
+ A gap is what is missing between a baseline and a target plateau: elements to add, change or remove. It is
16
+ the starting point of gap analysis in the TOGAF ADM.
17
+
18
+ ## Usage
19
+
20
+ Use ImplementationGap to represent:
21
+
22
+ - The difference between today's and the target architecture
23
+ - Requirements of a standard that are not met yet (compliance gap)
24
+ - The part of a plateau transition that a work package still has to deliver
25
+
26
+ ## How it connects
27
+
28
+ - A gap `compares` the plateaus it lies between (baseline and target)
29
+ - It is `closedBy` the work packages and deliverables that remove it
30
+ MD
31
+
32
+ icon "git-compare"
33
+ layer "implementation"
34
+
35
+ annotation "gap/status",
36
+ description: "Whether the gap is being closed",
37
+ enum: %w[open closing closed],
38
+ filter: :word,
39
+ summary: true
40
+ annotation "gap/impact",
41
+ description: "How much the gap matters",
42
+ enum: %w[low medium high critical],
43
+ filter: :word,
44
+ summary: true
45
+
46
+ relation :compares, :implementationPlateaus, :ImplementationPlateau
47
+ relation :closedBy, :implementationWorkPackages, :ImplementationWorkPackage
48
+ relation :closedBy, :implementationDeliverables, :ImplementationDeliverable
49
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ # ImplementationPlateau represents a relatively stable state of the architecture
4
+ class Archsight::Resources::ImplementationPlateau < Archsight::Resources::Base
5
+ include_annotations :git, :architecture, :risk
6
+
7
+ description <<~MD
8
+ Represents a relatively stable state of the architecture that exists during a limited period of time.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Implementation & Migration
13
+ **Aspect:** Composite
14
+
15
+ A plateau is a coherent set of architecture elements as they exist (or will exist) in one period. Plateaus
16
+ are the points of a migration path: baseline, transition states, target.
17
+
18
+ ## Usage
19
+
20
+ Use ImplementationPlateau to represent:
21
+
22
+ - The baseline (today's architecture) and the target architecture
23
+ - Transition architectures of a roadmap
24
+ - The state of the ISMS scope at a certification date
25
+
26
+ ## How it connects
27
+
28
+ - A plateau `contains` the components, services, nodes, processes and requirements that belong to it
29
+ - It `triggers` the next plateau (migration path)
30
+ - A `ImplementationDeliverable` `realizes` it; a `ImplementationGap` `compares` two plateaus
31
+ MD
32
+
33
+ icon "packages"
34
+ layer "implementation"
35
+
36
+ annotation "plateau/type",
37
+ description: "Position on the migration path",
38
+ enum: %w[baseline transition target],
39
+ filter: :word,
40
+ summary: true
41
+ annotation "plateau/status",
42
+ description: "Where the plateau is",
43
+ enum: %w[planned current past],
44
+ filter: :word,
45
+ summary: true
46
+ annotation "plateau/from",
47
+ description: "When the plateau starts (ISO 8601 date or time)",
48
+ title: "From",
49
+ validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
50
+ annotation "plateau/until",
51
+ description: "When the plateau ends (ISO 8601 date or time)",
52
+ title: "Until",
53
+ validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
54
+
55
+ relation :contains, :applicationComponents, :ApplicationComponent
56
+ relation :contains, :applicationServices, :ApplicationService
57
+ relation :contains, :technologyNodes, :TechnologyNode
58
+ relation :contains, :businessProcesses, :BusinessProcess
59
+ relation :contains, :motivationRequirements, :MotivationRequirement
60
+ relation :triggers, :implementationPlateaus, :ImplementationPlateau
61
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ # ImplementationWorkPackage represents a series of actions that achieves a result within a time frame
4
+ class Archsight::Resources::ImplementationWorkPackage < Archsight::Resources::Base
5
+ include_annotations :git, :architecture, :risk
6
+
7
+ description <<~MD
8
+ Represents a series of actions identified and designed to achieve specific results within specified time and resource constraints.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Implementation & Migration
13
+ **Aspect:** Behavior
14
+
15
+ A work package is a piece of work with a defined start and end that produces deliverables. It is how the
16
+ architecture changes: projects, measures, remediation of findings, roadmap items.
17
+
18
+ ## Usage
19
+
20
+ Use ImplementationWorkPackage to represent:
21
+
22
+ - Projects and roadmap items that move the architecture from one plateau to the next
23
+ - Measures and realisation plans of an ISMS (due date, status, owner)
24
+ - Remediation of a risk, vulnerability or audit finding (the `MotivationAssessment` is `mitigatedBy` the work package)
25
+ - Audit programmes and recurring reviews
26
+
27
+ ## How it connects
28
+
29
+ - `ownedBy` the accountable actor or role, `performedBy` the actors or roles that carry it out
30
+ - `realizes` deliverables (its results), requirements and goals
31
+ - `affects` the assets it changes; the assessments (risks, findings) it treats are `mitigatedBy` it (written on the assessment)
32
+ - `triggers` the work packages that follow it; an `ImplementationEvent` can trigger it
33
+ - A `ImplementationGap` is `closedBy` it
34
+
35
+ ## Security and risk modelling
36
+
37
+ Set `workpackage/type` `remediation` and list the work package under `mitigatedBy` of the risk or finding to see what is open; filter
38
+ by `workpackage/status`, `workpackage/due` and `risk/domain` for the plan of one domain.
39
+ MD
40
+
41
+ icon "hammer"
42
+ layer "implementation"
43
+
44
+ annotation "workpackage/type",
45
+ description: "What kind of work this is (specialization of the work package)",
46
+ enum: %w[project measure remediation audit-programme change],
47
+ filter: :word,
48
+ summary: true
49
+ annotation "workpackage/status",
50
+ description: "Where the work is",
51
+ enum: %w[planned in-progress done cancelled],
52
+ filter: :word,
53
+ summary: true
54
+ annotation "workpackage/priority",
55
+ description: "How urgent the work is",
56
+ enum: %w[low medium high critical],
57
+ filter: :word
58
+ annotation "workpackage/start",
59
+ description: "When the work starts (ISO 8601 date or time)",
60
+ title: "Start",
61
+ validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
62
+ annotation "workpackage/due",
63
+ description: "When the work is due (ISO 8601 date or time)",
64
+ title: "Due",
65
+ validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
66
+ annotation "workpackage/completed",
67
+ description: "When the work was completed (ISO 8601 date or time)",
68
+ title: "Completed",
69
+ validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
70
+
71
+ relation :ownedBy, :businessActors, :BusinessActor
72
+ relation :performedBy, :businessActors, :BusinessActor
73
+ relation :ownedBy, :businessRoles, :BusinessRole
74
+ relation :performedBy, :businessRoles, :BusinessRole
75
+ relation :realizes, :implementationDeliverables, :ImplementationDeliverable
76
+ relation :realizes, :motivationRequirements, :MotivationRequirement
77
+ relation :realizes, :goals, :MotivationGoal
78
+ relation :affects, :businessProcesses, :BusinessProcess
79
+ relation :affects, :applicationComponents, :ApplicationComponent
80
+ relation :affects, :applicationServices, :ApplicationService
81
+ relation :affects, :technologyNodes, :TechnologyNode
82
+ relation :triggers, :implementationWorkPackages, :ImplementationWorkPackage
83
+ end
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ # MotivationAssessment represents the outcome of an analysis: a risk, a vulnerability, a finding
4
+ class Archsight::Resources::MotivationAssessment < Archsight::Resources::Base
5
+ include_annotations :git, :architecture, :risk
6
+
7
+ description <<~MD
8
+ Represents the outcome of an analysis of some aspect of the architecture with respect to a driver: a risk, a
9
+ vulnerability, an audit finding, a supplier or protection-need assessment.
10
+
11
+ ## ArchiMate Definition
12
+
13
+ **Layer:** Motivation
14
+ **Aspect:** Behavior
15
+
16
+ An assessment is the outcome of an analysis of the state of affairs of the enterprise with respect to some
17
+ driver. In the risk and security overlay of the Open Group paper (*Modeling Enterprise Risk Management and
18
+ Security with the ArchiMate Language*) a **risk** is a quantification of a threat and a **vulnerability** is
19
+ the result of analysing weaknesses of architecture elements; both are assessments with a type. Set
20
+ `assessment/type` to say which.
21
+
22
+ ## Usage
23
+
24
+ Use MotivationAssessment to represent:
25
+
26
+ - Risks (`risk`) with an initial and a residual profile and a treatment decision
27
+ - Vulnerabilities (`vulnerability`), also the results of a scan or penetration test
28
+ - Audit and review findings (`finding`)
29
+ - Supplier assessments (`supplier`) and protection-need analyses (`protection-need`)
30
+
31
+ ## Risk profile
32
+
33
+ Initial risk is the risk before mitigation, residual risk the one after. Describe both with likelihood and
34
+ impact (`risk/initial-*`, `risk/residual-*`) and record the decision in `risk/treatment` (avoid, transfer,
35
+ mitigate, accept).
36
+
37
+ ## How it connects
38
+
39
+ - A `MotivationDriver` (the threat) `influences` the risk
40
+ - The assessment `assesses` the assets it is about (applications, nodes, processes, data, suppliers)
41
+ - A vulnerability `influences` the loss events it makes possible; a risk `influences` other risks
42
+ - It is `mitigatedBy` a `MotivationGoal` (control objective), a `MotivationRequirement` (control measure), a
43
+ `BusinessControl` or an `ImplementationWorkPackage` (remediation); read top-down: risk, objective, measure,
44
+ control
45
+ - It is `ownedBy` the accountable actor or role
46
+ MD
47
+
48
+ icon "stats-up-square"
49
+ layer "motivation"
50
+
51
+ likelihood = %w[very-low low medium high very-high]
52
+
53
+ annotation "assessment/id",
54
+ description: "Identifier of the assessment in its register (risk id, CVE, finding number)",
55
+ title: "Assessment ID"
56
+
57
+ annotation "assessment/type",
58
+ description: "What kind of assessment this is (specialization of the assessment)",
59
+ enum: %w[risk vulnerability finding supplier protection-need],
60
+ filter: :word,
61
+ summary: true
62
+
63
+ annotation "assessment/status",
64
+ description: "Where the assessment is in its life cycle",
65
+ enum: %w[open treating accepted closed],
66
+ filter: :word,
67
+ summary: true
68
+
69
+ annotation "assessment/severity",
70
+ description: "Severity of a vulnerability or finding",
71
+ enum: %w[info low medium high critical],
72
+ filter: :word
73
+
74
+ annotation "assessment/assessed",
75
+ description: "When the assessment was made (ISO 8601 date or time)",
76
+ title: "Assessed",
77
+ validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
78
+
79
+ annotation "risk/initial-likelihood",
80
+ description: "Likelihood of the loss before mitigation",
81
+ enum: likelihood,
82
+ filter: :word
83
+
84
+ annotation "risk/initial-impact",
85
+ description: "Impact of the loss before mitigation",
86
+ enum: likelihood,
87
+ filter: :word
88
+
89
+ annotation "risk/residual-likelihood",
90
+ description: "Likelihood of the loss after mitigation",
91
+ enum: likelihood,
92
+ filter: :word
93
+
94
+ annotation "risk/residual-impact",
95
+ description: "Impact of the loss after mitigation",
96
+ enum: likelihood,
97
+ filter: :word
98
+
99
+ annotation "risk/treatment",
100
+ description: "How the risk is treated",
101
+ enum: %w[avoid transfer mitigate accept],
102
+ filter: :word,
103
+ summary: true
104
+
105
+ relation :ownedBy, :businessActors, :BusinessActor
106
+ relation :ownedBy, :businessRoles, :BusinessRole
107
+ relation :assesses, :businessProcesses, :BusinessProcess
108
+ relation :assesses, :businessActors, :BusinessActor
109
+ relation :assesses, :applicationComponents, :ApplicationComponent
110
+ relation :assesses, :applicationServices, :ApplicationService
111
+ relation :assesses, :technologyNodes, :TechnologyNode
112
+ relation :assesses, :dataObjects, :DataObject
113
+ relation :influences, :businessEvents, :BusinessEvent
114
+ relation :influences, :applicationEvents, :ApplicationEvent
115
+ relation :influences, :technologyEvents, :TechnologyEvent
116
+ relation :influences, :motivationAssessments, :MotivationAssessment
117
+ relation :mitigatedBy, :goals, :MotivationGoal
118
+ relation :mitigatedBy, :motivationRequirements, :MotivationRequirement
119
+ relation :mitigatedBy, :businessControls, :BusinessControl
120
+ relation :mitigatedBy, :implementationWorkPackages, :ImplementationWorkPackage
121
+ end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # BusinessConstraint represents restrictions or limitations on architecture
4
- class Archsight::Resources::BusinessConstraint < Archsight::Resources::Base
5
- include_annotations :git, :architecture
3
+ # MotivationConstraint represents restrictions or limitations on architecture
4
+ class Archsight::Resources::MotivationConstraint < Archsight::Resources::Base
5
+ include_annotations :git, :architecture, :risk
6
6
 
7
7
  description <<~MD
8
8
  Represents a factor that limits the realization of goals or influences architecture decisions.
@@ -18,15 +18,21 @@ class Archsight::Resources::BusinessConstraint < Archsight::Resources::Base
18
18
 
19
19
  ## Usage
20
20
 
21
- Use BusinessConstraint to represent:
21
+ Use MotivationConstraint to represent:
22
22
 
23
23
  - Regulatory requirements (GDPR, SOX, PCI-DSS)
24
24
  - Security policies
25
25
  - Organizational standards
26
26
  - Technical limitations
27
27
  - Budget or resource constraints
28
+
29
+ ## Security and risk modelling
30
+
31
+ Use a constraint for rules that only restrict and are not a design statement: regulation, contractual duties,
32
+ operational policy (the overlay paper has no element for operational policy). Policies stated as principles
33
+ belong in `MotivationPrinciple`.
28
34
  MD
29
35
 
30
36
  icon "prohibition"
31
- layer "business"
37
+ layer "motivation"
32
38
  end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ # MotivationDriver represents an external or internal condition that motivates the enterprise to act
4
+ class Archsight::Resources::MotivationDriver < Archsight::Resources::Base
5
+ include_annotations :git, :architecture, :risk
6
+
7
+ description <<~MD
8
+ Represents an external or internal condition that motivates the enterprise to define its goals and act.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Motivation
13
+ **Aspect:** Active Structure
14
+
15
+ A driver is something that creates, motivates and fuels the change of an organization. In the risk and
16
+ security overlay of the Open Group paper (*Modeling Enterprise Risk Management and Security with the ArchiMate
17
+ Language*) the general notion of a **threat** (a threatening circumstance) is a driver; opportunities,
18
+ regulations and market forces are drivers too. Set `driver/type` to say which.
19
+
20
+ ## Usage
21
+
22
+ Use MotivationDriver to represent:
23
+
24
+ - Threats ("machines may fail", "attackers target customer data")
25
+ - Opportunities
26
+ - Regulation and legal change
27
+ - Market and customer demand
28
+
29
+ ## How it connects
30
+
31
+ - A driver `influences` the assessments (risks) it leads to and other drivers
32
+ - A threat driver `triggers` threat or loss events
33
+ - A `MotivationStakeholder` `hasConcern` for it
34
+ MD
35
+
36
+ icon "fire-flame"
37
+ layer "motivation"
38
+
39
+ annotation "driver/type",
40
+ description: "What kind of driver this is (specialization of the driver)",
41
+ enum: %w[threat opportunity regulation market internal],
42
+ filter: :word,
43
+ summary: true
44
+
45
+ relation :influences, :motivationAssessments, :MotivationAssessment
46
+ relation :influences, :motivationDrivers, :MotivationDriver
47
+ relation :triggers, :businessEvents, :BusinessEvent
48
+ relation :triggers, :applicationEvents, :ApplicationEvent
49
+ relation :triggers, :technologyEvents, :TechnologyEvent
50
+ end
@@ -3,7 +3,7 @@
3
3
  # MotivationGoal represents a high-level statement of intent, direction, or desired end state
4
4
  # for an organization and its stakeholders (ArchiMate Motivation Layer)
5
5
  class Archsight::Resources::MotivationGoal < Archsight::Resources::Base
6
- include_annotations :git, :architecture
6
+ include_annotations :git, :architecture, :risk
7
7
 
8
8
  description <<~MD
9
9
  Represents a high-level statement of intent or desired end state for the organization.
@@ -26,12 +26,24 @@ class Archsight::Resources::MotivationGoal < Archsight::Resources::Base
26
26
  - Quality goals
27
27
  - Compliance objectives
28
28
  - Performance targets
29
+
30
+ ## Security and risk modelling
31
+
32
+ In the Open Group risk and security overlay a goal with `goal/type` `control-objective` states what a control
33
+ achieves against a risk. The risk (`MotivationAssessment`) is `mitigatedBy` the goal, and the goal `realizes` the
34
+ requirements that are the control measures: risk, then objective, then measure, read top-down.
29
35
  MD
30
36
 
31
37
  icon "archery"
32
38
  layer "motivation"
33
39
 
40
+ annotation "goal/type",
41
+ description: "What kind of goal this is (specialization of the goal)",
42
+ enum: %w[business control-objective],
43
+ filter: :word,
44
+ summary: true
45
+
34
46
  relation :realizes, :outcomes, :MotivationOutcome
35
47
  relation :refinedBy, :goals, :MotivationGoal
36
- relation :realizes, :businessRequirements, :BusinessRequirement
48
+ relation :realizes, :motivationRequirements, :MotivationRequirement
37
49
  end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ # MotivationPrinciple represents a normative property of all systems in a context, such as a policy
4
+ class Archsight::Resources::MotivationPrinciple < Archsight::Resources::Base
5
+ include_annotations :git, :architecture, :risk
6
+
7
+ description <<~MD
8
+ Represents a statement of intent that defines a general property that applies to any system in a context: a
9
+ principle, and at design level a policy.
10
+
11
+ ## ArchiMate Definition
12
+
13
+ **Layer:** Motivation
14
+ **Aspect:** Passive Structure
15
+
16
+ A principle is a qualitative statement of intent that should be met by the architecture. In the risk and
17
+ security overlay of the Open Group paper (*Modeling Enterprise Risk Management and Security with the ArchiMate
18
+ Language*) a policy maps to a principle; risk policy and security policy are specializations. Set
19
+ `principle/type` to say which.
20
+
21
+ ## Usage
22
+
23
+ Use MotivationPrinciple to represent:
24
+
25
+ - Security and risk policies (information security policy, access control policy)
26
+ - Guidelines and procedures that state how a rule is applied
27
+ - Architecture principles
28
+
29
+ Rules that only restrict (regulation, an operational policy that is not a design statement) stay
30
+ `MotivationConstraint`. The text of a policy belongs in a `Page`; link it with `[[Page]]` in the description.
31
+
32
+ ## How it connects
33
+
34
+ - A principle is `ownedBy` the actor or role that issued it
35
+ - A `MotivationRequirement` (control measure) `realizes` the principle
36
+ MD
37
+
38
+ icon "book"
39
+ layer "motivation"
40
+
41
+ annotation "principle/type",
42
+ description: "What kind of statement this is (specialization of the principle)",
43
+ enum: %w[principle policy security-policy risk-policy guideline procedure],
44
+ filter: :word,
45
+ summary: true
46
+
47
+ annotation "principle/status",
48
+ description: "Whether the statement is in force",
49
+ enum: %w[draft valid retired],
50
+ filter: :word,
51
+ summary: true
52
+
53
+ annotation "principle/classification",
54
+ description: "Confidentiality classification of the statement",
55
+ enum: %w[public internal confidential strictly-confidential],
56
+ filter: :word
57
+
58
+ annotation "principle/valid-from",
59
+ description: "When the statement comes into force (ISO 8601 date or time)",
60
+ title: "Valid from",
61
+ validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
62
+
63
+ annotation "principle/valid-until",
64
+ description: "When the statement has to be reviewed or ends (ISO 8601 date or time)",
65
+ title: "Valid until",
66
+ validator: ->(value) { Archsight::Resources::Page.timestamp_error(value) }
67
+
68
+ annotation "principle/framework",
69
+ description: "Standards the statement maps to (comma-separated, e.g. c5-2020, iso27001-2022)",
70
+ title: "Framework mapping",
71
+ filter: :list
72
+
73
+ relation :ownedBy, :businessActors, :BusinessActor
74
+ relation :ownedBy, :businessRoles, :BusinessRole
75
+ end