archsight 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +24 -0
  3. data/CODE_OF_CONDUCT.md +10 -0
  4. data/CONTRIBUTING.md +186 -0
  5. data/Dockerfile +39 -0
  6. data/LICENSE.txt +201 -0
  7. data/README.md +170 -0
  8. data/SECURITY.md +27 -0
  9. data/exe/archsight +9 -0
  10. data/lib/archsight/annotations/aggregators.rb +109 -0
  11. data/lib/archsight/annotations/annotation.rb +168 -0
  12. data/lib/archsight/annotations/architecture_annotations.rb +59 -0
  13. data/lib/archsight/annotations/backup_annotations.rb +21 -0
  14. data/lib/archsight/annotations/computed.rb +264 -0
  15. data/lib/archsight/annotations/email_recipient.rb +35 -0
  16. data/lib/archsight/annotations/generated_annotations.rb +17 -0
  17. data/lib/archsight/annotations/git_annotations.rb +21 -0
  18. data/lib/archsight/annotations/relation_resolver.rb +160 -0
  19. data/lib/archsight/cli.rb +120 -0
  20. data/lib/archsight/configuration.rb +36 -0
  21. data/lib/archsight/database.rb +183 -0
  22. data/lib/archsight/documentation.rb +171 -0
  23. data/lib/archsight/graph.rb +113 -0
  24. data/lib/archsight/helpers.rb +210 -0
  25. data/lib/archsight/linter.rb +77 -0
  26. data/lib/archsight/mcp/analyze_resource_tool.rb +222 -0
  27. data/lib/archsight/mcp/base.rb +48 -0
  28. data/lib/archsight/mcp/query_tool.rb +113 -0
  29. data/lib/archsight/mcp/resource_doc_tool.rb +87 -0
  30. data/lib/archsight/mcp.rb +6 -0
  31. data/lib/archsight/query/ast.rb +279 -0
  32. data/lib/archsight/query/errors.rb +39 -0
  33. data/lib/archsight/query/evaluator.rb +707 -0
  34. data/lib/archsight/query/lexer.rb +289 -0
  35. data/lib/archsight/query/parser.rb +506 -0
  36. data/lib/archsight/query.rb +68 -0
  37. data/lib/archsight/renderer.rb +134 -0
  38. data/lib/archsight/resources/application_component.rb +346 -0
  39. data/lib/archsight/resources/application_interface.rb +54 -0
  40. data/lib/archsight/resources/application_service.rb +222 -0
  41. data/lib/archsight/resources/base.rb +300 -0
  42. data/lib/archsight/resources/business_actor.rb +195 -0
  43. data/lib/archsight/resources/business_constraint.rb +32 -0
  44. data/lib/archsight/resources/business_process.rb +37 -0
  45. data/lib/archsight/resources/business_product.rb +206 -0
  46. data/lib/archsight/resources/business_requirement.rb +56 -0
  47. data/lib/archsight/resources/compliance_evidence.rb +42 -0
  48. data/lib/archsight/resources/data_object.rb +49 -0
  49. data/lib/archsight/resources/motivation_goal.rb +37 -0
  50. data/lib/archsight/resources/motivation_outcome.rb +33 -0
  51. data/lib/archsight/resources/motivation_stakeholder.rb +38 -0
  52. data/lib/archsight/resources/strategy_capability.rb +38 -0
  53. data/lib/archsight/resources/technology_artifact.rb +154 -0
  54. data/lib/archsight/resources/technology_interface.rb +34 -0
  55. data/lib/archsight/resources/technology_node.rb +42 -0
  56. data/lib/archsight/resources/technology_service.rb +35 -0
  57. data/lib/archsight/resources/technology_system_software.rb +37 -0
  58. data/lib/archsight/resources/view.rb +51 -0
  59. data/lib/archsight/resources.rb +49 -0
  60. data/lib/archsight/template.rb +49 -0
  61. data/lib/archsight/version.rb +5 -0
  62. data/lib/archsight/web/application.rb +290 -0
  63. data/lib/archsight/web/doc/archimate.md +215 -0
  64. data/lib/archsight/web/doc/computed_annotations.md +316 -0
  65. data/lib/archsight/web/doc/icons.md +303 -0
  66. data/lib/archsight/web/doc/index.md.erb +74 -0
  67. data/lib/archsight/web/doc/modeling.md +200 -0
  68. data/lib/archsight/web/doc/search.md +227 -0
  69. data/lib/archsight/web/doc/togaf.md +255 -0
  70. data/lib/archsight/web/doc/tool.md +90 -0
  71. data/lib/archsight/web/public/css/artifact.css +985 -0
  72. data/lib/archsight/web/public/css/base.css +201 -0
  73. data/lib/archsight/web/public/css/graph.css +106 -0
  74. data/lib/archsight/web/public/css/highlight.min.css +10 -0
  75. data/lib/archsight/web/public/css/iconoir.css +22 -0
  76. data/lib/archsight/web/public/css/instance.css +329 -0
  77. data/lib/archsight/web/public/css/layout.css +421 -0
  78. data/lib/archsight/web/public/css/mermaid-layers.css +188 -0
  79. data/lib/archsight/web/public/css/pico.min.css +4 -0
  80. data/lib/archsight/web/public/favicon.ico +0 -0
  81. data/lib/archsight/web/public/img/archimate.png +0 -0
  82. data/lib/archsight/web/public/img/togaf-high-level.png +0 -0
  83. data/lib/archsight/web/public/js/graph-zoom.js +18 -0
  84. data/lib/archsight/web/public/js/highlight.min.js +3899 -0
  85. data/lib/archsight/web/public/js/htmx.min.js +1 -0
  86. data/lib/archsight/web/public/js/mermaid-init.js +88 -0
  87. data/lib/archsight/web/public/js/mermaid.min.js +2811 -0
  88. data/lib/archsight/web/public/js/sparkline.js +42 -0
  89. data/lib/archsight/web/public/js/svg-pan-zoom.min.js +3 -0
  90. data/lib/archsight/web/public/js/svg-zoom-controls.js +93 -0
  91. data/lib/archsight/web/views/index.haml +12 -0
  92. data/lib/archsight/web/views/partials/artifact/_activity.haml +55 -0
  93. data/lib/archsight/web/views/partials/artifact/_agentic.haml +25 -0
  94. data/lib/archsight/web/views/partials/artifact/_deployment.haml +29 -0
  95. data/lib/archsight/web/views/partials/artifact/_git_info.haml +16 -0
  96. data/lib/archsight/web/views/partials/artifact/_language_stats.haml +53 -0
  97. data/lib/archsight/web/views/partials/artifact/_links.haml +24 -0
  98. data/lib/archsight/web/views/partials/artifact/_project_estimate.haml +26 -0
  99. data/lib/archsight/web/views/partials/artifact/_repositories.haml +55 -0
  100. data/lib/archsight/web/views/partials/artifact/_team.haml +83 -0
  101. data/lib/archsight/web/views/partials/artifact/_workflow.haml +69 -0
  102. data/lib/archsight/web/views/partials/components/_activity.haml +37 -0
  103. data/lib/archsight/web/views/partials/components/_git.haml +17 -0
  104. data/lib/archsight/web/views/partials/components/_jira.haml +18 -0
  105. data/lib/archsight/web/views/partials/components/_languages.haml +29 -0
  106. data/lib/archsight/web/views/partials/components/_owner.haml +15 -0
  107. data/lib/archsight/web/views/partials/components/_repositories.haml +37 -0
  108. data/lib/archsight/web/views/partials/components/_status.haml +23 -0
  109. data/lib/archsight/web/views/partials/instance/_detail.haml +99 -0
  110. data/lib/archsight/web/views/partials/instance/_graph.haml +6 -0
  111. data/lib/archsight/web/views/partials/instance/_list.haml +84 -0
  112. data/lib/archsight/web/views/partials/instance/_relations.haml +43 -0
  113. data/lib/archsight/web/views/partials/instance/_requirements.haml +41 -0
  114. data/lib/archsight/web/views/partials/instance/_view_detail.haml +57 -0
  115. data/lib/archsight/web/views/partials/layout/_content.haml +40 -0
  116. data/lib/archsight/web/views/partials/layout/_error.haml +22 -0
  117. data/lib/archsight/web/views/partials/layout/_head.haml +24 -0
  118. data/lib/archsight/web/views/partials/layout/_navigation.haml +20 -0
  119. data/lib/archsight/web/views/partials/layout/_sidebar.haml +27 -0
  120. data/lib/archsight/web/views/search.haml +53 -0
  121. data/lib/archsight.rb +17 -0
  122. metadata +311 -0
@@ -0,0 +1,206 @@
1
+ # frozen_string_literal: true
2
+
3
+ # BusinessProduct represents a product or service offered to customers
4
+ class Archsight::Resources::BusinessProduct < Archsight::Resources::Base
5
+ include_annotations :git, :architecture
6
+
7
+ description <<~MD
8
+ Represents a coherent collection of services offered to customers.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Business
13
+ **Aspect:** Passive Structure
14
+
15
+ A product represents a coherent collection of services and/or passive structure elements,
16
+ accompanied by a contract/set of agreements, which is offered as a whole to customers.
17
+ Products are the marketable offerings that deliver value.
18
+
19
+ ## Usage
20
+
21
+ Use BusinessProduct to represent:
22
+
23
+ - Cloud services (Compute, Storage, Networking)
24
+ - Managed database offerings
25
+ - Kubernetes services
26
+ - Enterprise support packages
27
+ - API products
28
+ MD
29
+
30
+ icon "box-iso"
31
+ layer "business"
32
+
33
+ computed_annotation "repository/artifacts/total",
34
+ title: "Total Git Repositories",
35
+ description: "Number of related git repositories across all related application components",
36
+ type: Integer do
37
+ sum(outgoing_transitive(:ApplicationService), "repository/artifacts/total")
38
+ end
39
+
40
+ computed_annotation "repository/artifacts/active",
41
+ title: "Active Git Repositories",
42
+ description: "Number of related git repositories across all related application components",
43
+ type: Integer do
44
+ sum(outgoing_transitive(:ApplicationService), "repository/artifacts/active")
45
+ end
46
+
47
+ computed_annotation "repository/artifacts/abandoned",
48
+ title: "Abandoned Git Repositories",
49
+ description: "Number of related git repositories across all related application components",
50
+ type: Integer do
51
+ sum(outgoing_transitive(:ApplicationService), "repository/artifacts/abandoned")
52
+ end
53
+
54
+ computed_annotation "repository/artifacts/highBusFactor",
55
+ title: "High Bus Factor Repositories",
56
+ description: "Number of active git repositories with high bus factor across all related application components",
57
+ type: Integer do
58
+ sum(outgoing_transitive(:ApplicationService), "repository/artifacts/highBusFactor")
59
+ end
60
+
61
+ computed_annotation "repository/artifacts/archived",
62
+ title: "Archived Repositories",
63
+ description: "Number of archived git repositories across all related application services",
64
+ type: Integer do
65
+ sum(outgoing_transitive(:ApplicationService), "repository/artifacts/archived")
66
+ end
67
+
68
+ %w[scc/estimatedCost scc/estimatedScheduleMonths scc/estimatedPeople].each do |anno_key|
69
+ computed_annotation anno_key,
70
+ title: "Total #{anno_key.split("/").last.split(/(?=[A-Z])/).map(&:capitalize).join(" ")}",
71
+ description: "Total estimated #{anno_key.split("/").last} from related artifacts across all related application components",
72
+ type: Integer do
73
+ sum(outgoing_transitive(:ApplicationService), anno_key)
74
+ end
75
+ end
76
+
77
+ computed_annotation "activity/commits",
78
+ title: "Monthly Commits",
79
+ description: "Accumulated monthly commit counts across all related application services",
80
+ sidebar: false do
81
+ services = outgoing_transitive(:ApplicationService)
82
+ next nil if services.empty?
83
+
84
+ # Collect all commit arrays from services (they all end at the current month)
85
+ # Use get() to trigger computation of computed annotations on ApplicationServices
86
+ commit_arrays = services.map do |service|
87
+ commits_str = get(service, "activity/commits")
88
+ next nil if commits_str.nil? || commits_str.empty?
89
+
90
+ commits_str.split(",").map(&:to_i)
91
+ end.compact
92
+
93
+ next nil if commit_arrays.empty?
94
+
95
+ # Find the maximum length (oldest service determines the timeline)
96
+ max_length = commit_arrays.map(&:length).max
97
+
98
+ # Pad shorter arrays at the beginning with zeros and sum
99
+ result = Array.new(max_length, 0)
100
+ commit_arrays.each do |arr|
101
+ offset = max_length - arr.length
102
+ arr.each_with_index do |count, idx|
103
+ result[offset + idx] += count
104
+ end
105
+ end
106
+
107
+ result.join(",")
108
+ end
109
+
110
+ computed_annotation "activity/createdAt",
111
+ title: "Created",
112
+ description: "Earliest repository creation date across all related application services",
113
+ list: true,
114
+ type: Time do
115
+ services = outgoing_transitive(:ApplicationService)
116
+ next nil if services.empty?
117
+
118
+ # Use get() to trigger computation of computed annotations on ApplicationServices
119
+ dates = services.map do |service|
120
+ date_val = get(service, "activity/createdAt")
121
+ next nil if date_val.nil?
122
+
123
+ if date_val.is_a?(Time)
124
+ date_val
125
+ else
126
+ begin
127
+ Time.parse(date_val.to_s)
128
+ rescue StandardError
129
+ nil
130
+ end
131
+ end
132
+ end.compact
133
+
134
+ dates.min
135
+ end
136
+
137
+ computed_annotation "activity/contributors",
138
+ title: "Monthly Contributors",
139
+ description: "Accumulated monthly unique contributor counts across all related application services",
140
+ sidebar: false do
141
+ services = outgoing_transitive(:ApplicationService)
142
+ next nil if services.empty?
143
+
144
+ # Collect all contributor arrays from services (they all end at the current month)
145
+ # Use get() to trigger computation of computed annotations on ApplicationServices
146
+ contrib_arrays = services.map do |service|
147
+ contrib_str = get(service, "activity/contributors")
148
+ next nil if contrib_str.nil? || contrib_str.empty?
149
+
150
+ contrib_str.split(",").map(&:to_i)
151
+ end.compact
152
+
153
+ next nil if contrib_arrays.empty?
154
+
155
+ # Find the maximum length (oldest service determines the timeline)
156
+ max_length = contrib_arrays.map(&:length).max
157
+
158
+ # Pad shorter arrays at the beginning with zeros and sum
159
+ result = Array.new(max_length, 0)
160
+ contrib_arrays.each do |arr|
161
+ offset = max_length - arr.length
162
+ arr.each_with_index do |count, idx|
163
+ result[offset + idx] += count
164
+ end
165
+ end
166
+
167
+ result.join(",")
168
+ end
169
+
170
+ computed_annotation "activity/contributors/6m",
171
+ title: "Contributors (6 months)",
172
+ description: "Sum of unique contributors in the last 6 months across related services",
173
+ list: true,
174
+ type: Integer do
175
+ services = outgoing_transitive(:ApplicationService)
176
+ next nil if services.empty?
177
+
178
+ # Sum unique contributor counts from related services
179
+ total = services.sum do |service|
180
+ get(service, "activity/contributors/6m").to_i
181
+ end
182
+ total.positive? ? total : nil
183
+ end
184
+
185
+ computed_annotation "activity/contributors/total",
186
+ title: "Contributors (total)",
187
+ description: "Sum of unique contributors across related services",
188
+ type: Integer do
189
+ services = outgoing_transitive(:ApplicationService)
190
+ next nil if services.empty?
191
+
192
+ # Sum unique contributor counts from related services
193
+ total = services.sum do |service|
194
+ get(service, "activity/contributors/total").to_i
195
+ end
196
+ total.positive? ? total : nil
197
+ end
198
+
199
+ relation :realizes, :strategyCapabilities, :StrategyCapability
200
+ relation :realizes, :businessConstraints, :BusinessConstraint
201
+ relation :realizes, :businessRequirements, :BusinessRequirement
202
+ relation :servedBy, :businessActors, :BusinessActor
203
+ relation :servedBy, :applicationServices, :ApplicationService
204
+ relation :exposes, :applicationInterfaces, :ApplicationInterface
205
+ relation :provides, :complianceEvidences, :ComplianceEvidence
206
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ # BusinessRequirement represents functional or non-functional requirements
4
+ class Archsight::Resources::BusinessRequirement < Archsight::Resources::Base
5
+ include_annotations :git, :architecture
6
+
7
+ description <<~MD
8
+ Represents a statement of need that must be realized by the architecture.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Motivation
13
+ **Aspect:** Passive Structure
14
+
15
+ A requirement represents a statement of need defining a property that applies to a
16
+ specific system. Requirements can be functional (what the system should do) or
17
+ non-functional (how the system should behave).
18
+
19
+ ## Usage
20
+
21
+ Use BusinessRequirement to represent:
22
+
23
+ - Compliance requirements (C5, ISO 27001)
24
+ - Security requirements
25
+ - Performance requirements
26
+ - Functional specifications
27
+ - Legal obligations (GDPR, NIS2)
28
+ MD
29
+
30
+ icon "task-list"
31
+ layer "business"
32
+
33
+ annotation "requirement/type",
34
+ description: "Type of requirement (business or legal)",
35
+ enum: %w[business legal compliance functional non-functional]
36
+
37
+ annotation "requirement/reference",
38
+ description: "Regulatory or standard reference (comma-separated for multiple)",
39
+ filter: :list,
40
+ enum: %w[c5-2020 itgs-2023 gdpr-2018 nis1 nis2 iso27001 sox pci-dss hipaa eu-data-act-2025 ens
41
+ iso27001-2022],
42
+ list: true
43
+
44
+ annotation "requirement/priority",
45
+ description: "Implementation priority (must, should, may)",
46
+ filter: :word,
47
+ enum: %w[must should may],
48
+ list: true
49
+
50
+ annotation "requirement/story",
51
+ description: "One-line business value statement explaining what the requirement enables",
52
+ title: "Story",
53
+ format: :markdown
54
+
55
+ relation :realizes, :outcomes, :MotivationOutcome
56
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ # ComplianceEvidence represents proof of compliance with requirements
4
+ class Archsight::Resources::ComplianceEvidence < Archsight::Resources::Base
5
+ include_annotations :git, :architecture
6
+
7
+ description <<~MD
8
+ Represents documentation or artifacts that demonstrate compliance with requirements.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Implementation & Migration
13
+ **Aspect:** Passive Structure
14
+
15
+ Compliance evidence represents tangible proof that a system or process meets specific
16
+ requirements. It bridges the gap between stated requirements and their actual
17
+ implementation in the architecture.
18
+
19
+ ## Usage
20
+
21
+ Use ComplianceEvidence to represent:
22
+
23
+ - Audit reports
24
+ - Security certifications
25
+ - Test results and reports
26
+ - Configuration documentation
27
+ - Process documentation
28
+ MD
29
+
30
+ icon "shield-check"
31
+ layer "business"
32
+
33
+ annotation "evidence/type",
34
+ description: "Type of evidence",
35
+ enum: %w[documentation process configuration audit-log technical-control]
36
+
37
+ annotation "evidence/status",
38
+ description: "Current status of evidence",
39
+ enum: %w[implemented partial not-implemented]
40
+
41
+ relation :satisfies, :businessRequirements, :BusinessRequirement
42
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ # DataObject represents data structured for automated processing (ArchiMate Application Layer)
4
+ class Archsight::Resources::DataObject < Archsight::Resources::Base
5
+ include_annotations :git, :architecture, :generated
6
+
7
+ description <<~MD
8
+ Represents data structured for automated processing by applications.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Application
13
+ **Aspect:** Passive Structure
14
+
15
+ A data object represents data structured for automated processing. Data objects are
16
+ typically accessed and manipulated by application services and components, representing
17
+ the information model of the system.
18
+
19
+ ## Usage
20
+
21
+ Use DataObject to represent:
22
+
23
+ - API request/response schemas
24
+ - Database entities
25
+ - Message payloads
26
+ - Configuration structures
27
+ - Domain models
28
+ MD
29
+
30
+ icon "database"
31
+ layer "application"
32
+
33
+ annotation "data/application",
34
+ description: "Source API/application name",
35
+ title: "Application",
36
+ filter: :word
37
+
38
+ annotation "data/visibility",
39
+ description: "API visibility level",
40
+ title: "Visibility",
41
+ enum: %w[public private]
42
+
43
+ annotation "generated/variants",
44
+ description: "OpenAPI schema variants compacted into this DataObject",
45
+ title: "Schema Variants",
46
+ sidebar: false
47
+
48
+ relation :realizes, :businessConstraints, :BusinessConstraint
49
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ # MotivationGoal represents a high-level statement of intent, direction, or desired end state
4
+ # for an organization and its stakeholders (ArchiMate Motivation Layer)
5
+ class Archsight::Resources::MotivationGoal < Archsight::Resources::Base
6
+ include_annotations :git, :architecture
7
+
8
+ description <<~MD
9
+ Represents a high-level statement of intent or desired end state for the organization.
10
+
11
+ ## ArchiMate Definition
12
+
13
+ **Layer:** Motivation
14
+ **Aspect:** Behavior
15
+
16
+ A goal represents a high-level statement of intent, direction, or desired end state for
17
+ an organization and its stakeholders. Goals are typically refined into more specific
18
+ requirements that can be implemented.
19
+
20
+ ## Usage
21
+
22
+ Use MotivationGoal to represent:
23
+
24
+ - Strategic objectives
25
+ - Business targets
26
+ - Quality goals
27
+ - Compliance objectives
28
+ - Performance targets
29
+ MD
30
+
31
+ icon "archery"
32
+ layer "motivation"
33
+
34
+ relation :realizes, :outcomes, :MotivationOutcome
35
+ relation :refinedBy, :goals, :MotivationGoal
36
+ relation :realizes, :businessRequirements, :BusinessRequirement
37
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ # MotivationOutcome represents an end result, effect, or consequence of a certain state of affairs
4
+ # (ArchiMate Motivation Layer)
5
+ class Archsight::Resources::MotivationOutcome < Archsight::Resources::Base
6
+ include_annotations :git, :architecture
7
+
8
+ description <<~MD
9
+ Represents an end result that has been achieved or is intended to be achieved.
10
+
11
+ ## ArchiMate Definition
12
+
13
+ **Layer:** Motivation
14
+ **Aspect:** Passive Structure
15
+
16
+ An outcome represents an end result that has been achieved. Outcomes are measurable
17
+ results that indicate whether goals have been reached, providing concrete evidence
18
+ of progress or success.
19
+
20
+ ## Usage
21
+
22
+ Use MotivationOutcome to represent:
23
+
24
+ - Achieved milestones
25
+ - Measurable results
26
+ - Key performance indicators (KPIs)
27
+ - Success criteria
28
+ - Deliverables
29
+ MD
30
+
31
+ icon "badge-check"
32
+ layer "motivation"
33
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ # MotivationStakeholder represents the role of an individual, team, or organization
4
+ # that represents their interests in the effects of the architecture (ArchiMate Motivation Layer)
5
+ class Archsight::Resources::MotivationStakeholder < Archsight::Resources::Base
6
+ include_annotations :git, :architecture
7
+
8
+ description <<~MD
9
+ Represents the interest of an individual, team, or organization in the architecture.
10
+
11
+ ## ArchiMate Definition
12
+
13
+ **Layer:** Motivation
14
+ **Aspect:** Active Structure
15
+
16
+ A stakeholder represents the role of an individual, team, or organization that
17
+ represents their interests in the effects of the architecture. Stakeholders have
18
+ concerns about capabilities, requirements, and constraints.
19
+
20
+ ## Usage
21
+
22
+ Use MotivationStakeholder to represent:
23
+
24
+ - Product owners
25
+ - Executive sponsors
26
+ - Customer representatives
27
+ - Regulatory bodies
28
+ - Technical leadership
29
+ MD
30
+
31
+ icon "user-crown"
32
+ layer "motivation"
33
+
34
+ relation :hasConcern, :strategyCapabilities, :StrategyCapability
35
+ relation :hasConcern, :businessRequirements, :BusinessRequirement
36
+ relation :hasConcern, :businessConstraints, :BusinessConstraint
37
+ relation :hasConcern, :goals, :MotivationGoal
38
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ # StrategyCapability represents a strategic ability or function (ArchiMate Strategy Layer)
4
+ class Archsight::Resources::StrategyCapability < Archsight::Resources::Base
5
+ include_annotations :git, :architecture
6
+
7
+ description <<~MD
8
+ Represents an ability that an organization possesses to achieve specific outcomes.
9
+
10
+ ## ArchiMate Definition
11
+
12
+ **Layer:** Strategy
13
+ **Aspect:** Behavior
14
+
15
+ A capability represents an ability that an active structure element, such as an
16
+ organization, possesses. Capabilities are realized through a combination of people,
17
+ processes, and technology working together.
18
+
19
+ ## Usage
20
+
21
+ Use StrategyCapability to represent:
22
+
23
+ - Business capabilities (e.g., "Customer Provisioning")
24
+ - Technical capabilities (e.g., "Automated Deployment")
25
+ - Organizational abilities
26
+ - Core competencies
27
+ - Value-generating functions
28
+ MD
29
+
30
+ icon "strategy"
31
+ layer "strategy"
32
+
33
+ relation :realizes, :businessConstraints, :BusinessConstraint
34
+ relation :realizes, :businessRequirements, :BusinessRequirement
35
+ relation :servedBy, :businessActors, :BusinessActor
36
+ relation :servedBy, :applicationServices, :ApplicationService
37
+ relation :servedBy, :businessProcesses, :BusinessProcess
38
+ end
@@ -0,0 +1,154 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "uri"
4
+
5
+ # TechnologyArtifact usually a source code repository or container
6
+ class Archsight::Resources::TechnologyArtifact < Archsight::Resources::Base
7
+ include_annotations :git, :architecture, :generated
8
+
9
+ description <<~MD
10
+ Represents a source code repository or container artifact.
11
+
12
+ ## ArchiMate Definition
13
+
14
+ **Layer:** Technology
15
+ **Aspect:** Passive Structure
16
+
17
+ An artifact represents a piece of data that is used or produced in a software development
18
+ process, or by deployment and operation of an IT system. In this tool, artifacts primarily
19
+ represent source code repositories.
20
+
21
+ ## Usage
22
+
23
+ Use TechnologyArtifact to represent:
24
+
25
+ - Git repositories
26
+ - Container images
27
+ - Build artifacts
28
+ - Configuration packages
29
+ MD
30
+
31
+ icon "puzzle"
32
+ layer "technology"
33
+
34
+ # Artifact classification
35
+ annotation "artifact/type",
36
+ description: "Type of technology artifact",
37
+ title: "Artifact Type",
38
+ enum: %w[repo container chart deb rpm]
39
+
40
+ # Dynamic annotations (patterns with *)
41
+ annotation "link/*",
42
+ description: "Documentation and resource links",
43
+ sidebar: false
44
+ annotation "scc/language/*/loc",
45
+ description: "Lines of code per programming language",
46
+ sidebar: false
47
+ annotation "scc/languages",
48
+ description: "Comma-separated list of programming languages",
49
+ filter: :list,
50
+ title: "Languages",
51
+ sidebar: false
52
+ annotation "scc/estimatedCost",
53
+ description: "Estimated project cost",
54
+ title: "Estimated Cost",
55
+ type: Float
56
+ annotation "scc/estimatedScheduleMonths",
57
+ description: "Estimated schedule in months",
58
+ title: "Estimated Schedule",
59
+ type: Float
60
+ annotation "scc/estimatedPeople",
61
+ description: "Estimated number of people required",
62
+ title: "Estimated People",
63
+ type: Float
64
+ annotation "activity/commits",
65
+ description: "Monthly commit counts (comma-separated, oldest to newest)",
66
+ title: "Commits",
67
+ sidebar: false
68
+ annotation "activity/contributors",
69
+ description: "Monthly unique contributor counts (comma-separated, oldest to newest)",
70
+ title: "Contributors",
71
+ sidebar: false
72
+ annotation "activity/status",
73
+ description: "Repository activity status",
74
+ title: "Activity Status",
75
+ enum: %w[active abandoned bot-only archived],
76
+ list: true
77
+ annotation "activity/busFactor",
78
+ description: "Bus factor assessment",
79
+ title: "Bus Factor",
80
+ enum: %w[high medium low unknown],
81
+ list: true
82
+ annotation "activity/createdAt",
83
+ description: "Date of first commit (repository creation)",
84
+ title: "Created",
85
+ type: Time
86
+ annotation "agentic/tools",
87
+ description: "Agentic tools detected in repository",
88
+ title: "Agentic Tools",
89
+ filter: :list,
90
+ enum: %w[claude cursor aider github-copilot agents none]
91
+ annotation "workflow/platforms",
92
+ description: "CI/CD workflow platforms",
93
+ title: "Workflow Platforms",
94
+ filter: :list,
95
+ enum: %w[github-actions gitlab-ci makefile none]
96
+ annotation "workflow/types",
97
+ description: "CI/CD workflow types",
98
+ title: "Workflow Types",
99
+ filter: :list,
100
+ enum: %w[build test unit-test integration-test smoke-test deploy lint security-scan dependency-update
101
+ ticket-creation none]
102
+
103
+ # Urls for for git, chart repo, container repo
104
+ annotation "repository/artifacts",
105
+ description: "Types of artifacts produced by this repository",
106
+ title: "Artifacts",
107
+ filter: :list,
108
+ enum: %w[container chart debian rpm binary none]
109
+ annotation "repository/git",
110
+ description: "Git repository URL",
111
+ title: "Git Repository",
112
+ type: URI
113
+ annotation "repository/chart",
114
+ description: "Helm chart repository URL",
115
+ title: "Chart Repository",
116
+ type: URI
117
+ annotation "repository/container",
118
+ description: "Container registry URL",
119
+ title: "Container Repository",
120
+ type: URI
121
+ annotation "repository/visibility",
122
+ description: "Repository visibility classification",
123
+ title: "Visibility",
124
+ enum: %w[internal open-source public]
125
+ annotation "deployment/images",
126
+ description: "OCI container image names published by this repository",
127
+ title: "Container Images",
128
+ sidebar: false,
129
+ filter: :list
130
+ annotation "deployment/privileges/user",
131
+ description: "User privilege level for deployment",
132
+ title: "Deployment User Privileges",
133
+ enum: %w[as-root as-root-gvisor as-user-gvisor as-user-reduced-priviledges
134
+ as-user-reduced-priviledges-gvisor]
135
+ annotation "deployment/privileges/container",
136
+ description: "Container privilege level",
137
+ title: "Deployment Container Privileges",
138
+ enum: %w[unprivileged privileged]
139
+
140
+ # Contributor metrics (unique counts, stored during import)
141
+ annotation "activity/contributors/6m",
142
+ title: "Contributors (6 months)",
143
+ description: "Unique contributors in the last 6 months",
144
+ type: Integer
145
+ annotation "activity/contributors/total",
146
+ title: "Contributors (total)",
147
+ description: "Total unique contributors",
148
+ type: Integer
149
+
150
+ relation :servedBy, :technologyComponents, :TechnologyArtifact
151
+ relation :suppliedBy, :technologyComponents, :TechnologyService
152
+ relation :maintainedBy, :businessActors, :BusinessActor
153
+ relation :contributedBy, :businessActors, :BusinessActor
154
+ end