@documentation-robotics/cli 0.2.0 → 0.4.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 (335) hide show
  1. package/README.md +46 -16
  2. package/dist/analysis/relationship-classifier.js +2 -9
  3. package/dist/analysis/relationship-classifier.js.map +2 -2
  4. package/dist/analyzers/active-analyzer.js +62 -0
  5. package/dist/analyzers/active-analyzer.js.map +7 -0
  6. package/dist/analyzers/call-graph-utils.js +2 -2
  7. package/dist/analyzers/call-graph-utils.js.map +2 -2
  8. package/dist/analyzers/cards/build.js +191 -0
  9. package/dist/analyzers/cards/build.js.map +7 -0
  10. package/dist/analyzers/cards/classify.js +42 -0
  11. package/dist/analyzers/cards/classify.js.map +7 -0
  12. package/dist/analyzers/cards/edge-index.js +44 -0
  13. package/dist/analyzers/cards/edge-index.js.map +7 -0
  14. package/dist/analyzers/cards/extract.js +138 -0
  15. package/dist/analyzers/cards/extract.js.map +7 -0
  16. package/dist/analyzers/cards/facts.js +46 -0
  17. package/dist/analyzers/cards/facts.js.map +7 -0
  18. package/dist/analyzers/cards/graph.js +42 -0
  19. package/dist/analyzers/cards/graph.js.map +7 -0
  20. package/dist/analyzers/cards/index.js +8 -0
  21. package/dist/analyzers/cards/index.js.map +7 -0
  22. package/dist/analyzers/cards/routes.js +96 -0
  23. package/dist/analyzers/cards/routes.js.map +7 -0
  24. package/dist/analyzers/cards/tier0.js +18 -0
  25. package/dist/analyzers/cards/tier0.js.map +7 -0
  26. package/dist/analyzers/cards/types.js +1 -0
  27. package/dist/analyzers/cards/types.js.map +7 -0
  28. package/dist/analyzers/cbm-analyzer.js +270 -174
  29. package/dist/analyzers/cbm-analyzer.js.map +2 -2
  30. package/dist/analyzers/cbm-responses.js +342 -0
  31. package/dist/analyzers/cbm-responses.js.map +7 -0
  32. package/dist/analyzers/code-changes.js +159 -0
  33. package/dist/analyzers/code-changes.js.map +7 -0
  34. package/dist/analyzers/edge-relationships.js +49 -0
  35. package/dist/analyzers/edge-relationships.js.map +7 -0
  36. package/dist/analyzers/extraction-plan.js +541 -0
  37. package/dist/analyzers/extraction-plan.js.map +7 -0
  38. package/dist/analyzers/index-job.js +229 -0
  39. package/dist/analyzers/index-job.js.map +7 -0
  40. package/dist/analyzers/mapping-loader.js +9 -0
  41. package/dist/analyzers/mapping-loader.js.map +2 -2
  42. package/dist/analyzers/tier0-rules.js +153 -0
  43. package/dist/analyzers/tier0-rules.js.map +7 -0
  44. package/dist/analyzers/types.js.map +1 -1
  45. package/dist/audit/relationships/ai/prompts.js +10 -10
  46. package/dist/audit/relationships/ai/prompts.js.map +2 -2
  47. package/dist/audit/relationships/analysis/layer-templates.js +52 -52
  48. package/dist/audit/relationships/analysis/layer-templates.js.map +1 -1
  49. package/dist/cli.js +23 -11
  50. package/dist/cli.js.map +2 -2
  51. package/dist/coding-agents/default-permissions.js +31 -1
  52. package/dist/coding-agents/default-permissions.js.map +2 -2
  53. package/dist/coding-agents/drbot-mcp.js +269 -0
  54. package/dist/coding-agents/drbot-mcp.js.map +7 -0
  55. package/dist/commands/add.js +7 -4
  56. package/dist/commands/add.js.map +2 -2
  57. package/dist/commands/analyzer.js +143 -40
  58. package/dist/commands/analyzer.js.map +2 -2
  59. package/dist/commands/changeset-verify.js +63 -0
  60. package/dist/commands/changeset-verify.js.map +7 -0
  61. package/dist/commands/changeset.js +80 -29
  62. package/dist/commands/changeset.js.map +2 -2
  63. package/dist/commands/delete.js +10 -4
  64. package/dist/commands/delete.js.map +2 -2
  65. package/dist/commands/farm.js +176 -60
  66. package/dist/commands/farm.js.map +2 -2
  67. package/dist/commands/init.js +9 -26
  68. package/dist/commands/init.js.map +2 -2
  69. package/dist/commands/mcp.js +40 -21
  70. package/dist/commands/mcp.js.map +3 -3
  71. package/dist/commands/relationship.js +208 -37
  72. package/dist/commands/relationship.js.map +2 -2
  73. package/dist/commands/reports.js +3 -3
  74. package/dist/commands/reports.js.map +2 -2
  75. package/dist/commands/update.js +52 -32
  76. package/dist/commands/update.js.map +2 -2
  77. package/dist/commands/upgrade.js +99 -103
  78. package/dist/commands/upgrade.js.map +3 -3
  79. package/dist/commands/validate.js +19 -3
  80. package/dist/commands/validate.js.map +2 -2
  81. package/dist/commands/version.js +1 -1
  82. package/dist/commands/visualize.js +34 -15
  83. package/dist/commands/visualize.js.map +2 -2
  84. package/dist/core/annotation-store.js +15 -5
  85. package/dist/core/annotation-store.js.map +2 -2
  86. package/dist/core/catalog-migration.js +34 -0
  87. package/dist/core/catalog-migration.js.map +7 -0
  88. package/dist/core/changeset-analysis.js +421 -0
  89. package/dist/core/changeset-analysis.js.map +7 -0
  90. package/dist/core/changeset-base-index.js +160 -0
  91. package/dist/core/changeset-base-index.js.map +7 -0
  92. package/dist/core/changeset-brief-compact.js +256 -0
  93. package/dist/core/changeset-brief-compact.js.map +7 -0
  94. package/dist/core/changeset-brief-delta.js +102 -0
  95. package/dist/core/changeset-brief-delta.js.map +7 -0
  96. package/dist/core/changeset-graph.js +281 -0
  97. package/dist/core/changeset-graph.js.map +7 -0
  98. package/dist/core/changeset-only-guard.js +32 -0
  99. package/dist/core/changeset-only-guard.js.map +7 -0
  100. package/dist/core/changeset-summary.js +68 -0
  101. package/dist/core/changeset-summary.js.map +7 -0
  102. package/dist/core/changeset-validator.js +66 -20
  103. package/dist/core/changeset-validator.js.map +2 -2
  104. package/dist/core/changeset-verify.js +848 -0
  105. package/dist/core/changeset-verify.js.map +7 -0
  106. package/dist/core/changeset.js +56 -9
  107. package/dist/core/changeset.js.map +2 -2
  108. package/dist/core/element-type-migration.js +145 -0
  109. package/dist/core/element-type-migration.js.map +7 -0
  110. package/dist/core/extraction-observability.js +161 -0
  111. package/dist/core/extraction-observability.js.map +7 -0
  112. package/dist/core/farm-manifest.js +12 -6
  113. package/dist/core/farm-manifest.js.map +2 -2
  114. package/dist/core/farm-sync-engine.js +1 -1
  115. package/dist/core/farm-sync-engine.js.map +2 -2
  116. package/dist/core/farm-sync-state.js +10 -2
  117. package/dist/core/farm-sync-state.js.map +2 -2
  118. package/dist/core/migration-registry.js +88 -47
  119. package/dist/core/migration-registry.js.map +2 -2
  120. package/dist/core/model-upgrade.js +102 -0
  121. package/dist/core/model-upgrade.js.map +7 -0
  122. package/dist/core/model.js +82 -30
  123. package/dist/core/model.js.map +2 -2
  124. package/dist/core/mutation-handler.js +71 -6
  125. package/dist/core/mutation-handler.js.map +2 -2
  126. package/dist/core/project-init.js +53 -0
  127. package/dist/core/project-init.js.map +7 -0
  128. package/dist/core/relationship-migration-table.js +6639 -0
  129. package/dist/core/relationship-migration-table.js.map +7 -0
  130. package/dist/core/relationship-migration.js +272 -0
  131. package/dist/core/relationship-migration.js.map +7 -0
  132. package/dist/core/relationship-prune.js +49 -0
  133. package/dist/core/relationship-prune.js.map +7 -0
  134. package/dist/core/relationship-staging.js +161 -0
  135. package/dist/core/relationship-staging.js.map +7 -0
  136. package/dist/core/relationships.js +26 -4
  137. package/dist/core/relationships.js.map +2 -2
  138. package/dist/core/report-data-model.js +7 -13
  139. package/dist/core/report-data-model.js.map +2 -2
  140. package/dist/core/staged-changeset-storage.js +145 -18
  141. package/dist/core/staged-changeset-storage.js.map +2 -2
  142. package/dist/core/staged-source-reference.js +28 -0
  143. package/dist/core/staged-source-reference.js.map +7 -0
  144. package/dist/core/staging-area.js +166 -24
  145. package/dist/core/staging-area.js.map +2 -2
  146. package/dist/core/upgrade-plan.js +117 -0
  147. package/dist/core/upgrade-plan.js.map +7 -0
  148. package/dist/core/virtual-projection.js +13 -5
  149. package/dist/core/virtual-projection.js.map +2 -2
  150. package/dist/export/archimate-exporter.js +1 -0
  151. package/dist/export/archimate-exporter.js.map +2 -2
  152. package/dist/generated/compiled-validators.js +2 -2
  153. package/dist/generated/compiled-validators.js.map +2 -2
  154. package/dist/generated/layer-registry.js +16 -16
  155. package/dist/generated/layer-registry.js.map +2 -2
  156. package/dist/generated/node-types.js +186 -168
  157. package/dist/generated/node-types.js.map +2 -2
  158. package/dist/generated/relationship-index.js +2468 -7913
  159. package/dist/generated/relationship-index.js.map +2 -2
  160. package/dist/integrations/claude_code/.claude-plugin/plugin.json +24 -0
  161. package/dist/integrations/claude_code/agents/dr-architect.md +30 -3
  162. package/dist/integrations/claude_code/agents/dr-extractor.md +8 -2
  163. package/dist/integrations/claude_code/commands/dr-analyzer.md +565 -0
  164. package/dist/integrations/claude_code/commands/dr-changeset.md +2 -1
  165. package/dist/integrations/claude_code/commands/dr-map.md +20 -1
  166. package/dist/integrations/claude_code/commands/dr-plan.md +66 -0
  167. package/dist/integrations/claude_code/commands/dr-relate.md +106 -96
  168. package/dist/integrations/claude_code/commands/dr-verify.md +45 -2
  169. package/dist/integrations/claude_code/docs/END_TO_END_WALKTHROUGH.md +14 -0
  170. package/dist/integrations/claude_code/docs/MCP_SERVER.md +47 -26
  171. package/dist/integrations/claude_code/docs/QUICK_START.md +37 -8
  172. package/dist/integrations/claude_code/docs/README.md +68 -2
  173. package/dist/integrations/claude_code/plugin-agents/dr-advisor.md +255 -0
  174. package/dist/integrations/claude_code/plugin-agents/dr-architect.md +306 -0
  175. package/dist/integrations/claude_code/skills/dr_01_motivation_layer/SKILL.md +93 -72
  176. package/dist/integrations/claude_code/skills/dr_02_business_layer/SKILL.md +163 -126
  177. package/dist/integrations/claude_code/skills/dr_03_product_layer/SKILL.md +161 -126
  178. package/dist/integrations/claude_code/skills/dr_04_security_layer/SKILL.md +153 -133
  179. package/dist/integrations/claude_code/skills/dr_05_application_layer/SKILL.md +129 -100
  180. package/dist/integrations/claude_code/skills/dr_06_technology_layer/SKILL.md +111 -94
  181. package/dist/integrations/claude_code/skills/dr_07_api_layer/SKILL.md +143 -157
  182. package/dist/integrations/claude_code/skills/dr_08_data_model_layer/SKILL.md +117 -33
  183. package/dist/integrations/claude_code/skills/dr_09_dataset_layer/SKILL.md +74 -25
  184. package/dist/integrations/claude_code/skills/dr_10_ux_layer/SKILL.md +88 -12
  185. package/dist/integrations/claude_code/skills/dr_11_navigation_layer/SKILL.md +83 -24
  186. package/dist/integrations/claude_code/skills/dr_12_apm_layer/SKILL.md +57 -12
  187. package/dist/integrations/claude_code/skills/dr_13_testing_layer/SKILL.md +95 -15
  188. package/dist/integrations/claude_code/skills/dr_change_planning/SKILL.md +178 -0
  189. package/dist/integrations/claude_code/skills/dr_changeset_reviewer/SKILL.md +8 -0
  190. package/dist/integrations/claude_code/skills/dr_engineering_guide/SKILL.md +6 -1
  191. package/dist/integrations/github_copilot/agents/dr-architect.md +3 -1
  192. package/dist/integrations/github_copilot/skills/dr_01_motivation_layer/SKILL.md +182 -102
  193. package/dist/integrations/github_copilot/skills/dr_02_business_layer/SKILL.md +266 -148
  194. package/dist/integrations/github_copilot/skills/dr_03_product_layer/SKILL.md +547 -86
  195. package/dist/integrations/github_copilot/skills/dr_04_security_layer/SKILL.md +164 -169
  196. package/dist/integrations/github_copilot/skills/dr_05_application_layer/SKILL.md +420 -150
  197. package/dist/integrations/github_copilot/skills/dr_06_technology_layer/SKILL.md +331 -138
  198. package/dist/integrations/github_copilot/skills/dr_07_api_layer/SKILL.md +265 -201
  199. package/dist/integrations/github_copilot/skills/dr_08_data_model_layer/SKILL.md +181 -58
  200. package/dist/integrations/github_copilot/skills/dr_09_dataset_layer/SKILL.md +209 -57
  201. package/dist/integrations/github_copilot/skills/dr_10_ux_layer/SKILL.md +277 -112
  202. package/dist/integrations/github_copilot/skills/dr_11_navigation_layer/SKILL.md +219 -70
  203. package/dist/integrations/github_copilot/skills/dr_12_apm_layer/SKILL.md +189 -105
  204. package/dist/integrations/github_copilot/skills/dr_13_testing_layer/SKILL.md +225 -102
  205. package/dist/integrations/github_copilot/skills/dr_change_planning/SKILL.md +177 -0
  206. package/dist/integrations/github_copilot/skills/dr_changeset_reviewer/SKILL.md +3 -0
  207. package/dist/integrations/hash-utils.js.map +2 -2
  208. package/dist/mcp/api-key-manager.js +14 -1
  209. package/dist/mcp/api-key-manager.js.map +2 -2
  210. package/dist/mcp/changeset-only.js +45 -0
  211. package/dist/mcp/changeset-only.js.map +7 -0
  212. package/dist/mcp/project-root.js +85 -0
  213. package/dist/mcp/project-root.js.map +7 -0
  214. package/dist/mcp/server-instructions.js +27 -0
  215. package/dist/mcp/server-instructions.js.map +7 -0
  216. package/dist/mcp/strict-schema.js +52 -0
  217. package/dist/mcp/strict-schema.js.map +7 -0
  218. package/dist/mcp/tool-registry.js +55 -5
  219. package/dist/mcp/tool-registry.js.map +2 -2
  220. package/dist/mcp/tools/changeset-analysis-tools.js +98 -0
  221. package/dist/mcp/tools/changeset-analysis-tools.js.map +7 -0
  222. package/dist/mcp/tools/changeset-commit.js +224 -0
  223. package/dist/mcp/tools/changeset-commit.js.map +7 -0
  224. package/dist/mcp/tools/changeset-editing.js +260 -0
  225. package/dist/mcp/tools/changeset-editing.js.map +7 -0
  226. package/dist/mcp/tools/changeset-lifecycle.js +83 -0
  227. package/dist/mcp/tools/changeset-lifecycle.js.map +7 -0
  228. package/dist/mcp/tools/changeset-shared.js +31 -0
  229. package/dist/mcp/tools/changeset-shared.js.map +7 -0
  230. package/dist/mcp/tools/changeset-show.js +17 -1
  231. package/dist/mcp/tools/changeset-show.js.map +2 -2
  232. package/dist/mcp/tools/changeset-verify.js +49 -0
  233. package/dist/mcp/tools/changeset-verify.js.map +7 -0
  234. package/dist/mcp/tools/codebase-extract.js +836 -0
  235. package/dist/mcp/tools/codebase-extract.js.map +7 -0
  236. package/dist/mcp/tools/codebase-index.js +125 -0
  237. package/dist/mcp/tools/codebase-index.js.map +7 -0
  238. package/dist/mcp/tools/codebase-shared.js +265 -0
  239. package/dist/mcp/tools/codebase-shared.js.map +7 -0
  240. package/dist/mcp/tools/codebase-verify.js +48 -0
  241. package/dist/mcp/tools/codebase-verify.js.map +7 -0
  242. package/dist/mcp/tools/index.js +34 -1
  243. package/dist/mcp/tools/index.js.map +2 -2
  244. package/dist/mcp/tools/model-add.js +191 -74
  245. package/dist/mcp/tools/model-add.js.map +2 -2
  246. package/dist/mcp/tools/model-delete.js +2 -2
  247. package/dist/mcp/tools/model-delete.js.map +2 -2
  248. package/dist/mcp/tools/model-search.js +14 -0
  249. package/dist/mcp/tools/model-search.js.map +2 -2
  250. package/dist/mcp/tools/model-show.js +29 -2
  251. package/dist/mcp/tools/model-show.js.map +2 -2
  252. package/dist/mcp/tools/model-trace.js +93 -30
  253. package/dist/mcp/tools/model-trace.js.map +2 -2
  254. package/dist/mcp/tools/model-update.js +46 -26
  255. package/dist/mcp/tools/model-update.js.map +2 -2
  256. package/dist/mcp/tools/model-validate.js +46 -4
  257. package/dist/mcp/tools/model-validate.js.map +2 -2
  258. package/dist/mcp/tools/project-status-collectors.js +381 -0
  259. package/dist/mcp/tools/project-status-collectors.js.map +7 -0
  260. package/dist/mcp/tools/project-status.js +237 -0
  261. package/dist/mcp/tools/project-status.js.map +7 -0
  262. package/dist/mcp/tools/project-tools.js +505 -0
  263. package/dist/mcp/tools/project-tools.js.map +7 -0
  264. package/dist/mcp/tools/relationship-tools.js +167 -0
  265. package/dist/mcp/tools/relationship-tools.js.map +7 -0
  266. package/dist/mcp/tools/review-open.js +210 -0
  267. package/dist/mcp/tools/review-open.js.map +7 -0
  268. package/dist/mcp/tools/shared.js +35 -4
  269. package/dist/mcp/tools/shared.js.map +2 -2
  270. package/dist/mcp/tools/spec-type.js +90 -0
  271. package/dist/mcp/tools/spec-type.js.map +7 -0
  272. package/dist/reports/model-report-orchestrator.js +31 -2
  273. package/dist/reports/model-report-orchestrator.js.map +2 -2
  274. package/dist/schemas/bundled/analyzers/cbm.json +1200 -70
  275. package/dist/schemas/bundled/analyzers/manifest.json +2 -2
  276. package/dist/schemas/bundled/api.json +1029 -1658
  277. package/dist/schemas/bundled/apm.json +499 -734
  278. package/dist/schemas/bundled/application.json +735 -371
  279. package/dist/schemas/bundled/base.json +3 -220
  280. package/dist/schemas/bundled/business.json +452 -366
  281. package/dist/schemas/bundled/data-model.json +395 -411
  282. package/dist/schemas/bundled/data-store.json +334 -558
  283. package/dist/schemas/bundled/manifest.json +18 -18
  284. package/dist/schemas/bundled/motivation.json +349 -368
  285. package/dist/schemas/bundled/navigation.json +415 -731
  286. package/dist/schemas/bundled/product.json +325 -159
  287. package/dist/schemas/bundled/security.json +864 -1232
  288. package/dist/schemas/bundled/technology.json +574 -703
  289. package/dist/schemas/bundled/testing.json +865 -1646
  290. package/dist/schemas/bundled/ux.json +739 -1352
  291. package/dist/server/schemas.js +8 -0
  292. package/dist/server/schemas.js.map +2 -2
  293. package/dist/server/server.js +686 -231
  294. package/dist/server/server.js.map +3 -3
  295. package/dist/server/viewer-registry.js +264 -0
  296. package/dist/server/viewer-registry.js.map +7 -0
  297. package/dist/server-entry.js +2 -1
  298. package/dist/server-entry.js.map +2 -2
  299. package/dist/telemetry/index.js +1 -1
  300. package/dist/utils/ansi-suppressor.js +6 -8
  301. package/dist/utils/ansi-suppressor.js.map +2 -2
  302. package/dist/utils/attribute-patch.js +41 -0
  303. package/dist/utils/attribute-patch.js.map +7 -0
  304. package/dist/utils/error-hints.js +29 -0
  305. package/dist/utils/error-hints.js.map +7 -0
  306. package/dist/utils/errors.js +9 -3
  307. package/dist/utils/errors.js.map +2 -2
  308. package/dist/utils/id-generator.js +5 -2
  309. package/dist/utils/id-generator.js.map +2 -2
  310. package/dist/utils/project-paths.js +26 -1
  311. package/dist/utils/project-paths.js.map +2 -2
  312. package/dist/utils/source-reference.js +64 -31
  313. package/dist/utils/source-reference.js.map +2 -2
  314. package/dist/utils/spec-version.js +2 -2
  315. package/dist/utils/spec-version.js.map +1 -1
  316. package/dist/validators/composed-reference-validator.js +5 -27
  317. package/dist/validators/composed-reference-validator.js.map +2 -2
  318. package/dist/validators/model-warnings.js +28 -0
  319. package/dist/validators/model-warnings.js.map +7 -0
  320. package/dist/validators/reference-validator.js +0 -7
  321. package/dist/validators/reference-validator.js.map +2 -2
  322. package/dist/validators/relationship-schema-validator.js +3 -3
  323. package/dist/validators/relationship-schema-validator.js.map +2 -2
  324. package/dist/validators/schema-validator.js +27 -9
  325. package/dist/validators/schema-validator.js.map +2 -2
  326. package/dist/validators/types.js.map +1 -1
  327. package/dist/viewer/README.md +6 -6
  328. package/dist/viewer/assets/main-CUOQGGRA.css +1 -0
  329. package/dist/viewer/assets/main-DvH3gYrI.js +84 -0
  330. package/dist/viewer/index.html +2 -2
  331. package/dist/viewer/manifest.json +10 -10
  332. package/dist/viewer/version.json +1 -1
  333. package/package.json +2 -1
  334. package/dist/viewer/assets/main-B7AOQXXX.js +0 -81
  335. package/dist/viewer/assets/main-vdrFrG7q.css +0 -1
@@ -1,10 +1,10 @@
1
1
  {
2
- "specVersion": "0.10.0",
2
+ "specVersion": "0.12.0",
3
3
  "layer": {
4
4
  "id": "motivation",
5
5
  "number": 1,
6
6
  "name": "Motivation Layer",
7
- "description": "Layer 1: Motivation Layer",
7
+ "description": "Captures why the system exists: stakeholders and their drivers, assessments, goals and outcomes, principles, requirements and constraints, and the meaning and value attached to them (ArchiMate 3.2 motivation elements). Motivation elements are expressed in documents, decision records and requirement text rather than in executable code; every lower layer should be traceable back to an element here. Modelling rules: realization runs through motivation, as in ArchiMate: requirements realize the outcomes, goals and principles they make concrete, and outcomes realize goals. Decomposition is same-type only: an element aggregates the narrower elements of its own type that make it up, and specializes a more general one. Influence is one motivation element shaping another: drivers, assessments, stakeholders, goals, principles and constraints influence goals, outcomes, principles, requirements and constraints, and a constraint constrains the requirements it limits. Association is kept for concerns and interpretation: a stakeholder is associated with the drivers, goals, requirements, principles, outcomes and constraints it cares about, an assessment with the drivers it evaluates, and meaning and value are associated with any concept and are always the source of that association. Other layers trace to motivation with one predicate per meaning: they satisfy requirements, constraints and principles; an element realizes a goal or outcome it exists to achieve and supports one it contributes to alongside others; services and features deliver value, and user workflows deliver the outcomes they produce. A stakeholder is not served: business actors and roles, like personas, reference the stakeholder whose concerns they stand for.",
8
8
  "inspired_by": {
9
9
  "standard": "ArchiMate 3.2",
10
10
  "version": "3.2",
@@ -27,7 +27,7 @@
27
27
  "assessment": {
28
28
  "$schema": "http://json-schema.org/draft-07/schema#",
29
29
  "title": "Assessment",
30
- "description": "Outcome of analysis of the state of affairs of the enterprise or any part of it, and its environment. Assessments commonly take the form of strengths, weaknesses, opportunities, or threats (SWOT).",
30
+ "description": "A recorded finding or judgement produced by analysing the current state of the enterprise, a system, or its environment, such as an identified strength, weakness, risk, gap, or feasibility verdict. It states what is the case, not a desired end state, a result to achieve, or an obligation on the solution. Use Driver instead when the element names the motivating condition or concern itself (e.g. 'GDPR compliance', 'rising cloud cost') rather than an analytical finding about it (e.g. 'current logging stores PII unencrypted'). Use Outcome instead when the statement describes an end result the organization plans to achieve or has achieved, with a lifecycle status, rather than a diagnosis of the present situation. Use Constraint instead when the statement restricts which design or implementation options are allowed, rather than reporting an evaluated fact about the current state. Use Requirement instead when the statement prescribes a need the system must satisfy (e.g. 'must encrypt PII at rest') instead of describing the observed deficiency that prompted it.",
31
31
  "allOf": [
32
32
  {
33
33
  "$ref": "urn:dr:spec:base:spec-node"
@@ -47,7 +47,8 @@
47
47
  "type": "object",
48
48
  "properties": {
49
49
  "documentation": {
50
- "type": "string"
50
+ "type": "string",
51
+ "description": "Free-text statement of the finding, including what was analysed, the evidence or source (e.g. audit, ADR, threat model), and when it was assessed. Set it for every assessment so the finding can be verified."
51
52
  },
52
53
  "assessmentType": {
53
54
  "type": "string",
@@ -66,12 +67,24 @@
66
67
  "additionalProperties": false
67
68
  }
68
69
  },
70
+ "x-dr-standard": "ArchiMate 3.2 §6.2.3 Assessment",
71
+ "x-dr-evidence": [
72
+ "The 'Context' or 'Problem Statement' section of an ADR stating an observed weakness, limitation, or risk of the existing design that the decision responds to.",
73
+ "Entries in a risk register, threat model (e.g. STRIDE table in threat-model.md), or security/audit findings file listing identified threats or vulnerabilities with likelihood or severity.",
74
+ "A tech-debt, gap-analysis, or readiness/feasibility document (or tracked issue labelled tech-debt/gap) recording that a current capability is missing, inadequate, or viable."
75
+ ],
76
+ "x-dr-distinguish": {
77
+ "motivation.driver": "the element names the motivating condition or concern itself (e.g. 'GDPR compliance', 'rising cloud cost') rather than an analytical finding about it (e.g. 'current logging stores PII unencrypted').",
78
+ "motivation.outcome": "the statement describes an end result the organization plans to achieve or has achieved, with a lifecycle status, rather than a diagnosis of the present situation.",
79
+ "motivation.constraint": "the statement restricts which design or implementation options are allowed, rather than reporting an evaluated fact about the current state.",
80
+ "motivation.requirement": "the statement prescribes a need the system must satisfy (e.g. 'must encrypt PII at rest') instead of describing the observed deficiency that prompted it."
81
+ },
69
82
  "$id": "urn:dr:spec:node:motivation.assessment"
70
83
  },
71
84
  "constraint": {
72
85
  "$schema": "http://json-schema.org/draft-07/schema#",
73
86
  "title": "Constraint",
74
- "description": "Restriction on the freedom of design and implementation choices available when realizing a system, as opposed to requirements which must be satisfied.",
87
+ "description": "A stated restriction on the solution space, such as a mandated or forbidden technology, a deadline, a budget ceiling, a jurisdiction or a contractual term, that limits which design or implementation options are permissible without describing a capability or quality the system must deliver. It is stated in decision records, policies or requirement text; code such as a fitness test may enforce it, but is not where it is defined. Use Requirement instead when the statement describes a function or quality the system must provide (what it must do or how well), rather than ruling options in or out for how it is built. Use Principle instead when the statement is a general normative rule meant to guide many decisions across systems (e.g. 'prefer managed services') rather than a specific, checkable limit on one solution. Use Driver instead when the item is the underlying condition or force (a new regulation, a market shift) that motivates change, rather than the concrete restriction derived from it. Use Assessment instead when the item is an analytical finding about the current state (a risk, gap or weakness) rather than a binding limit on design choices.",
75
88
  "allOf": [
76
89
  {
77
90
  "$ref": "urn:dr:spec:base:spec-node"
@@ -91,7 +104,8 @@
91
104
  "type": "object",
92
105
  "properties": {
93
106
  "documentation": {
94
- "type": "string"
107
+ "type": "string",
108
+ "description": "Free-text statement of the restriction, giving its source (regulation, contract, decision record, budget), the scope it applies to and how compliance can be checked; set it for every constraint so the limit can be verified."
95
109
  },
96
110
  "constraintType": {
97
111
  "type": "string",
@@ -114,12 +128,24 @@
114
128
  "additionalProperties": false
115
129
  }
116
130
  },
131
+ "x-dr-standard": "ArchiMate 3.2 §6.3.5 Constraint",
132
+ "x-dr-evidence": [
133
+ "An ADR or design doc section titled 'Constraints' or 'Decision drivers' with mandatory wording such as 'must use PostgreSQL 14', 'no GPL dependencies' or 'must ship before Q3'",
134
+ "Code comments or config justified by a cited rule, e.g. cloud region pinned to eu-* with a comment referencing GDPR data residency, or a deny-list of licences in a dependency-audit config",
135
+ "Architecture fitness tests or lint rules (ArchUnit, dependency-cruiser, import-linter) that forbid certain imports, libraries or runtime versions, together with documentation naming the restriction they enforce"
136
+ ],
137
+ "x-dr-distinguish": {
138
+ "motivation.requirement": "the statement describes a function or quality the system must provide (what it must do or how well), rather than ruling options in or out for how it is built",
139
+ "motivation.principle": "the statement is a general normative rule meant to guide many decisions across systems (e.g. 'prefer managed services') rather than a specific, checkable limit on one solution",
140
+ "motivation.driver": "the item is the underlying condition or force (a new regulation, a market shift) that motivates change, rather than the concrete restriction derived from it",
141
+ "motivation.assessment": "the item is an analytical finding about the current state (a risk, gap or weakness) rather than a binding limit on design choices"
142
+ },
117
143
  "$id": "urn:dr:spec:node:motivation.constraint"
118
144
  },
119
145
  "driver": {
120
146
  "$schema": "http://json-schema.org/draft-07/schema#",
121
147
  "title": "Driver",
122
- "description": "External or internal condition that motivates an organization to change its goals, strategy, or architecture.",
148
+ "description": "A motivation element naming an external or internal condition or force (e.g. a regulation coming into effect, market pressure, rising operating cost, technical debt) that prompts the organization to set or change goals, requirements or architecture. It names the condition itself, not an evaluation of it and not the response to it. Use Assessment instead when the element records the result of analysing a condition (a SWOT finding, risk rating, gap or feasibility conclusion) rather than naming the condition itself. Use Goal instead when the statement expresses a desired end state or direction the organization intends to pursue in response to the condition. Use Constraint instead when the element is a fixed restriction on design or implementation choices (e.g. 'must run on-prem') rather than a force that motivates change. Use Stakeholder instead when the element is the person, team or organization holding the concern, not the concern or condition itself.",
123
149
  "allOf": [
124
150
  {
125
151
  "$ref": "urn:dr:spec:base:spec-node"
@@ -139,7 +165,8 @@
139
165
  "type": "object",
140
166
  "properties": {
141
167
  "documentation": {
142
- "type": "string"
168
+ "type": "string",
169
+ "description": "Free-text description of the motivating condition: what it is, where it originates (internal or external), and any source evidence such as a regulation citation, incident or metric. Set it whenever the name alone does not make the condition unambiguous."
143
170
  },
144
171
  "category": {
145
172
  "type": "string",
@@ -160,12 +187,24 @@
160
187
  "additionalProperties": false
161
188
  }
162
189
  },
190
+ "x-dr-standard": "ArchiMate 3.2 §6.2.2 Driver",
191
+ "x-dr-evidence": [
192
+ "An ADR or design doc 'Context' / 'Motivation' / 'Background' section naming an external or internal condition, such as 'GDPR enforcement deadline' or 'p95 latency complaints from customers', as the reason for the change.",
193
+ "Issue tracker epics or labels (e.g. 'compliance', 'tech-debt', 'cost-reduction') whose description cites a regulation, market event or operational problem that triggers a body of work.",
194
+ "Code comments or README notes that justify a module's existence by citing a condition, e.g. '// Required due to PCI-DSS 4.0 rollout' or 'Introduced because vendor X API is deprecated in 2025'."
195
+ ],
196
+ "x-dr-distinguish": {
197
+ "motivation.assessment": "the element records the result of analysing a condition (a SWOT finding, risk rating, gap or feasibility conclusion) rather than naming the condition itself.",
198
+ "motivation.goal": "the statement expresses a desired end state or direction the organization intends to pursue in response to the condition.",
199
+ "motivation.constraint": "the element is a fixed restriction on design or implementation choices (e.g. 'must run on-prem') rather than a force that motivates change.",
200
+ "motivation.stakeholder": "the element is the person, team or organization holding the concern, not the concern or condition itself."
201
+ },
163
202
  "$id": "urn:dr:spec:node:motivation.driver"
164
203
  },
165
204
  "goal": {
166
205
  "$schema": "http://json-schema.org/draft-07/schema#",
167
206
  "title": "Goal",
168
- "description": "High-level statement of intent, direction, or desired end state",
207
+ "description": "A motivation statement of an end state or direction that stakeholders intend to reach, expressed qualitatively and at a level general enough that it does not prescribe a specific system property or measurable result, and is refined by requirements and outcomes. Use Outcome instead when the statement names a concrete, measurable or time-bound result, or tracks one that is planned, in progress or achieved, such as 'checkout p95 latency under 300 ms by Q3'. Use Requirement instead when the statement specifies a need that a particular system, component or solution must satisfy and that can be verified against it, such as 'the API shall support OAuth2 client credentials'. Use Principle instead when the statement is a standing rule that governs how all designs in a context are made, such as 'prefer managed services', rather than an end state to reach. Use Driver instead when the statement describes the condition or force prompting change, such as a new regulation or market pressure, rather than the intended end state that responds to it.",
169
208
  "allOf": [
170
209
  {
171
210
  "$ref": "urn:dr:spec:base:spec-node"
@@ -185,7 +224,8 @@
185
224
  "type": "object",
186
225
  "properties": {
187
226
  "documentation": {
188
- "type": "string"
227
+ "type": "string",
228
+ "description": "Free-text prose that states the intended end state, its scope and owning stakeholders, and links to the source document. Set it whenever the goal's name alone does not make the intent unambiguous."
189
229
  },
190
230
  "priority": {
191
231
  "type": "string",
@@ -201,12 +241,24 @@
201
241
  "additionalProperties": false
202
242
  }
203
243
  },
244
+ "x-dr-standard": "ArchiMate 3.2 §6.3.1 Goal",
245
+ "x-dr-evidence": [
246
+ "A 'Goals', 'Objectives' or 'Vision' section in a README, design document or product brief that lists intended end states without acceptance criteria.",
247
+ "An 'Objective' entry in an OKR or roadmap file (e.g. okrs.yaml, ROADMAP.md) that sits above its measurable key results.",
248
+ "An ADR or RFC 'Context' or 'Motivation' section stating what the change is meant to achieve, such as 'enable self-service onboarding for partners', and referenced by the requirements or decisions that follow."
249
+ ],
250
+ "x-dr-distinguish": {
251
+ "motivation.outcome": "the statement names a concrete, measurable or time-bound result, or tracks one that is planned, in progress or achieved, such as 'checkout p95 latency under 300 ms by Q3'.",
252
+ "motivation.requirement": "the statement specifies a need that a particular system, component or solution must satisfy and that can be verified against it, such as 'the API shall support OAuth2 client credentials'.",
253
+ "motivation.principle": "the statement is a standing rule that governs how all designs in a context are made, such as 'prefer managed services', rather than an end state to reach.",
254
+ "motivation.driver": "the statement describes the condition or force prompting change, such as a new regulation or market pressure, rather than the intended end state that responds to it."
255
+ },
204
256
  "$id": "urn:dr:spec:node:motivation.goal"
205
257
  },
206
258
  "meaning": {
207
259
  "$schema": "http://json-schema.org/draft-07/schema#",
208
260
  "title": "Meaning",
209
- "description": "Knowledge or expertise present in, or the interpretation given to, a concept in a particular context, as understood by stakeholders.",
261
+ "description": "A motivation element recording the interpretation or knowledge that stakeholders attach to a specific concept (a term, data item, artifact, or other architecture element) within a stated context, expressed as an explanatory statement of what the concept signifies rather than as an intent, need, condition, or worth. Use Value instead when the statement expresses how much a concept is worth or how useful it is to a stakeholder (financial, strategic, reputational benefit), not what it signifies. Use Principle instead when the statement is normative, prescribing how systems or decisions should behave, rather than explaining what a concept means. Use Requirement instead when the statement declares a need that a system must satisfy, including a requirement that a term be interpreted a certain way. Use Assessment instead when the statement is a finding from analysing the current state of affairs (strength, weakness, risk, gap), not the interpretation of a concept.",
210
262
  "allOf": [
211
263
  {
212
264
  "$ref": "urn:dr:spec:base:spec-node"
@@ -226,18 +278,31 @@
226
278
  "type": "object",
227
279
  "properties": {
228
280
  "documentation": {
229
- "type": "string"
281
+ "type": "string",
282
+ "description": "Free-text statement of the interpretation itself: which concept it applies to, the context or stakeholder group in which the interpretation holds, and the meaning given; set it on every instance, since it is the substance of the element."
230
283
  }
231
284
  },
232
285
  "additionalProperties": false
233
286
  }
234
287
  },
288
+ "x-dr-standard": "ArchiMate 3.2 §6.4.1 Meaning",
289
+ "x-dr-evidence": [
290
+ "a glossary or ubiquitous-language document (e.g. GLOSSARY.md, docs/domain-terms.md) defining business terms as used in a specific bounded context",
291
+ "a docstring or comment on a domain class, enum value, or field explaining the business interpretation of the concept, e.g. 'An \"active\" customer means one with a purchase in the last 90 days'",
292
+ "a data dictionary or schema description entry (e.g. dbt schema.yml column description, JSON Schema 'description', OpenAPI field description) stating what a field signifies for its consumers"
293
+ ],
294
+ "x-dr-distinguish": {
295
+ "motivation.value": "the statement expresses how much a concept is worth or how useful it is to a stakeholder (financial, strategic, reputational benefit), not what it signifies",
296
+ "motivation.principle": "the statement is normative, prescribing how systems or decisions should behave, rather than explaining what a concept means",
297
+ "motivation.requirement": "the statement declares a need that a system must realize, including a requirement that a term be interpreted a certain way",
298
+ "motivation.assessment": "the statement is a finding from analysing the current state of affairs (strength, weakness, risk, gap), not the interpretation of a concept"
299
+ },
235
300
  "$id": "urn:dr:spec:node:motivation.meaning"
236
301
  },
237
302
  "outcome": {
238
303
  "$schema": "http://json-schema.org/draft-07/schema#",
239
304
  "title": "Outcome",
240
- "description": "End result intended or already achieved by the organization or a system, distinct from a Goal which expresses the desired direction.",
305
+ "description": "A motivation element stating a concrete, preferably measurable end result that the organization or a system has achieved or intends to achieve, usually with a target value, threshold or time frame. It describes a state that can be checked as reached or not reached, not a direction of intent or a capability the system must provide. Use Goal instead when the statement expresses a desired direction or end state without a measurable target or verifiable completion point (e.g. 'improve customer satisfaction'). Use Requirement instead when the statement specifies what a system or solution must do or exhibit (a need to be realized by design), rather than the business or system result that follows from it. Use Value instead when the element expresses the worth or utility to a stakeholder (e.g. 'lower operating cost'), not the concrete result that produces that worth. Use Assessment instead when the statement records a finding about the current state of affairs (a SWOT item, risk or gap) rather than an intended or achieved result.",
241
306
  "allOf": [
242
307
  {
243
308
  "$ref": "urn:dr:spec:base:spec-node"
@@ -257,7 +322,8 @@
257
322
  "type": "object",
258
323
  "properties": {
259
324
  "documentation": {
260
- "type": "string"
325
+ "type": "string",
326
+ "description": "Free-text statement of the result, including the measure, target value or threshold, and target date where known; set it for every outcome so its achievement can be verified."
261
327
  },
262
328
  "status": {
263
329
  "type": "string",
@@ -279,12 +345,24 @@
279
345
  "additionalProperties": false
280
346
  }
281
347
  },
348
+ "x-dr-standard": "ArchiMate 3.2 §6.3.2 Outcome",
349
+ "x-dr-evidence": [
350
+ "A key result or success criterion in an OKR, roadmap or epic document stating a measurable target with a date, e.g. 'checkout abandonment below 20% by Q4'",
351
+ "A 'Success metrics' or 'Expected outcome' section in a PRD, RFC or ADR describing the verifiable result after delivery, often tagged with a tracking status such as done, on-track or at-risk",
352
+ "An SLO or KPI objective in monitoring or dashboard configuration (e.g. a Datadog/Prometheus SLO target) whose name and description reference a business result and link to a stated goal"
353
+ ],
354
+ "x-dr-distinguish": {
355
+ "motivation.goal": "the statement expresses a desired direction or end state without a measurable target or verifiable completion point (e.g. 'improve customer satisfaction')",
356
+ "motivation.requirement": "the statement specifies what a system or solution must do or exhibit (a need to be realized by design), rather than the business or system result that follows from it",
357
+ "motivation.value": "the element expresses the worth or utility to a stakeholder (e.g. 'lower operating cost'), not the concrete result that produces that worth",
358
+ "motivation.assessment": "the statement records a finding about the current state of affairs (a SWOT item, risk or gap) rather than an intended or achieved result"
359
+ },
282
360
  "$id": "urn:dr:spec:node:motivation.outcome"
283
361
  },
284
362
  "principle": {
285
363
  "$schema": "http://json-schema.org/draft-07/schema#",
286
364
  "title": "Principle",
287
- "description": "Normative property of all systems in a given context, or a statement governing how an organization intends to fulfill its mission and guide decision-making.",
365
+ "description": "A normative statement, applying across all systems or decisions within a stated scope (enterprise, domain, or programme), that prescribes how design and implementation choices should generally be made, without targeting one specific system or being directly verifiable as met by it. Use Requirement instead when the statement names a specific system, component or solution and can be verified as satisfied or not for that system (e.g. 'the Orders API must use OAuth 2.0'). Use Constraint instead when the statement is an externally imposed or fixed restriction on the solution space for a particular realization (e.g. a mandated vendor, deadline or budget) rather than a self-adopted guideline. Use Goal instead when the statement expresses a desired end state or direction to reach (e.g. 'reduce time-to-market') rather than a rule for how decisions are made. Use Value instead when the element captures the worth or importance of something to stakeholders rather than a prescription governing choices.",
288
366
  "allOf": [
289
367
  {
290
368
  "$ref": "urn:dr:spec:base:spec-node"
@@ -304,7 +382,8 @@
304
382
  "type": "object",
305
383
  "properties": {
306
384
  "documentation": {
307
- "type": "string"
385
+ "type": "string",
386
+ "description": "Free-text statement of the principle, ideally with its rationale and implications, written as a single prescriptive sentence followed by explanatory prose; set it for every principle."
308
387
  },
309
388
  "category": {
310
389
  "type": "string",
@@ -328,12 +407,24 @@
328
407
  "additionalProperties": false
329
408
  }
330
409
  },
410
+ "x-dr-standard": "ArchiMate 3.2 §6.3.3 Principle",
411
+ "x-dr-evidence": [
412
+ "An architecture-principles document or ADR section listing broad prescriptive statements (e.g. 'API-first', 'Data is owned by a single service') each with rationale and implications.",
413
+ "An engineering handbook or CONTRIBUTING.md passage stating repository-wide conventions phrased as 'we always/never …' that are cited as justification in multiple ADRs or code reviews.",
414
+ "An architecture fitness test or lint rule set (e.g. ArchUnit, dependency-cruiser, eslint config) whose comments or names cite a named principle enforced across all modules rather than one feature."
415
+ ],
416
+ "x-dr-distinguish": {
417
+ "motivation.requirement": "the statement names a specific system, component or solution and can be verified as satisfied or not for that system (e.g. 'the Orders API must use OAuth 2.0').",
418
+ "motivation.constraint": "the statement is an externally imposed or fixed restriction on the solution space for a particular realization (e.g. a mandated vendor, deadline or budget) rather than a self-adopted guideline.",
419
+ "motivation.goal": "the statement expresses a desired end state or direction to reach (e.g. 'reduce time-to-market') rather than a rule for how decisions are made.",
420
+ "motivation.value": "the element captures the worth or importance of something to stakeholders rather than a prescription governing choices."
421
+ },
331
422
  "$id": "urn:dr:spec:node:motivation.principle"
332
423
  },
333
424
  "requirement": {
334
425
  "$schema": "http://json-schema.org/draft-07/schema#",
335
426
  "title": "Requirement",
336
- "description": "Statement of need that must be realized by a system, component, or solution, and that can be associated with stakeholders, goals, or constraints.",
427
+ "description": "A statement of need that a system, component, or solution must satisfy, phrased as a specific, verifiable behavior or property (typically a 'shall/must' statement with acceptance criteria) and traceable to the stakeholders, drivers, or goals that motivate it. Use Goal instead when the statement expresses a high-level desired direction or end state that cannot be directly verified against a specific system, rather than a concrete need the system must meet. Use Constraint instead when the statement limits the design or implementation options (e.g. a mandated technology, budget, deadline, or regulation) rather than stating something the system must do or exhibit. Use Principle instead when the statement is a general normative rule that applies to all systems in a context and guides decisions, rather than a need assigned to a particular system or solution. Use Outcome instead when the statement describes a measurable end result the organization intends or has achieved, rather than a property the system must have to contribute to it.",
337
428
  "allOf": [
338
429
  {
339
430
  "$ref": "urn:dr:spec:base:spec-node"
@@ -353,7 +444,8 @@
353
444
  "type": "object",
354
445
  "properties": {
355
446
  "documentation": {
356
- "type": "string"
447
+ "type": "string",
448
+ "description": "Free-text statement of the requirement, including its full wording, rationale, source, and acceptance or verification criteria; set it whenever the name alone does not make the need verifiable."
357
449
  },
358
450
  "requirementType": {
359
451
  "type": "string",
@@ -380,12 +472,24 @@
380
472
  "additionalProperties": false
381
473
  }
382
474
  },
475
+ "x-dr-standard": "ArchiMate 3.2 §6.3.4 Requirement",
476
+ "x-dr-evidence": [
477
+ "A requirements document, PRD, or SRS entry with a stable identifier (e.g. REQ-042, FR-7, NFR-3) and 'shall'/'must' wording",
478
+ "A user story or issue tracker ticket labeled as a requirement, with acceptance criteria that tests or reviewers check against",
479
+ "Test annotations, docstrings, or traceability matrices that reference a requirement ID (e.g. @Requirement(\"REQ-042\"), '# Verifies NFR-3') linking code or tests back to the stated need"
480
+ ],
481
+ "x-dr-distinguish": {
482
+ "motivation.goal": "the statement expresses a high-level desired direction or end state that cannot be directly verified against a specific system, rather than a concrete need the system must meet",
483
+ "motivation.constraint": "the statement limits the design or implementation options (e.g. a mandated technology, budget, deadline, or regulation) rather than stating something the system must do or exhibit",
484
+ "motivation.principle": "the statement is a general normative rule that applies to all systems in a context and guides decisions, rather than a need assigned to a particular system or solution",
485
+ "motivation.outcome": "the statement describes a measurable end result the organization intends or has achieved, rather than a property the system must have to contribute to it"
486
+ },
383
487
  "$id": "urn:dr:spec:node:motivation.requirement"
384
488
  },
385
489
  "stakeholder": {
386
490
  "$schema": "http://json-schema.org/draft-07/schema#",
387
491
  "title": "Stakeholder",
388
- "description": "Individual, team, or organization that has an interest in, or is affected by, the effects of the architecture.",
492
+ "description": "A motivation element naming a person, group, team, organization, or class of such parties, by its role or perspective, whose interests or concerns about the architecture are what drivers, goals, and requirements are traced back to. It captures who cares and why, not who performs behavior. Use Driver instead when the element states the concern or condition itself (e.g. 'GDPR fines', 'customer churn') rather than the party who holds it. Use Requirement instead when the text is a need the system must satisfy, such as a user story 'As a clerk I want…', where the clerk is only the associated stakeholder. Use Value instead when the element expresses the worth or benefit a party gains, rather than the party itself. Use business BusinessActor or BusinessRole instead when the party performs behaviour in the business; the actor or role references the stakeholder whose concerns it stands for.",
389
493
  "allOf": [
390
494
  {
391
495
  "$ref": "urn:dr:spec:base:spec-node"
@@ -405,7 +509,8 @@
405
509
  "type": "object",
406
510
  "properties": {
407
511
  "documentation": {
408
- "type": "string"
512
+ "type": "string",
513
+ "description": "Free-text description of the stakeholder's role, scope, and principal concerns or interests in the architecture. Set it whenever the name alone does not make clear who the party is or what it cares about."
409
514
  },
410
515
  "type": {
411
516
  "type": "string",
@@ -425,12 +530,23 @@
425
530
  "additionalProperties": false
426
531
  }
427
532
  },
533
+ "x-dr-standard": "ArchiMate 3.2 §6.2.1 Stakeholder",
534
+ "x-dr-evidence": [
535
+ "A 'Stakeholders' section or RACI table in a README, architecture document, or ADR that lists named roles or teams together with their concerns",
536
+ "MADR or ADR front-matter fields such as 'deciders', 'consulted', or 'informed' that list teams, roles, or external bodies",
537
+ "Compliance or requirements documents that name an external authority or audience (e.g. 'PCI SSC', 'data protection officer', 'merchant partners') as the source of an obligation or concern"
538
+ ],
539
+ "x-dr-distinguish": {
540
+ "motivation.driver": "the element states the concern or condition itself (e.g. 'GDPR fines', 'customer churn') rather than the party who holds it",
541
+ "motivation.requirement": "the text is a need the system must satisfy, such as a user story 'As a clerk I want…', where the clerk is only the associated stakeholder",
542
+ "motivation.value": "the element expresses the worth or benefit a party gains, rather than the party itself"
543
+ },
428
544
  "$id": "urn:dr:spec:node:motivation.stakeholder"
429
545
  },
430
546
  "value": {
431
547
  "$schema": "http://json-schema.org/draft-07/schema#",
432
548
  "title": "Value",
433
- "description": "Relative worth, utility, or importance of a concept, phenomenon, or outcome to one or more stakeholders.",
549
+ "description": "A motivation element stating the worth, benefit, or utility that a specific concept, service, feature, or outcome has for one or more named stakeholders, expressed from the stakeholder's perspective (for example 'saves customers ten minutes per order') rather than as a target, a result, or a need. Use Outcome instead when the statement describes an end result the organization intends or has achieved, such as a measurable state change, rather than why that result is worth something to a stakeholder. Use Goal instead when the statement expresses a desired direction or end state the organization strives toward, not the benefit a stakeholder derives. Use Meaning instead when the statement gives the interpretation or definition of a concept in a context, not its worth or importance. Use Driver instead when the statement describes a condition or force that motivates change, such as market pressure or regulation, rather than a benefit delivered.",
434
550
  "allOf": [
435
551
  {
436
552
  "$ref": "urn:dr:spec:base:spec-node"
@@ -450,7 +566,8 @@
450
566
  "type": "object",
451
567
  "properties": {
452
568
  "documentation": {
453
- "type": "string"
569
+ "type": "string",
570
+ "description": "Free-text explanation of the value: which stakeholders it applies to, what benefit they gain, and any quantification or evidence. Set it whenever the element name alone does not state who benefits and how."
454
571
  },
455
572
  "valueType": {
456
573
  "type": "string",
@@ -472,31 +589,33 @@
472
589
  "additionalProperties": false
473
590
  }
474
591
  },
592
+ "x-dr-standard": "ArchiMate 3.2 §6.4.2 Value",
593
+ "x-dr-evidence": [
594
+ "A 'Value proposition', 'Benefits' or 'Why this matters' section in a product spec, PRD or README that names a stakeholder and the benefit they receive",
595
+ "A business case, OKR or ADR 'Consequences/Benefits' entry quantifying worth to a stakeholder, such as cost saved, revenue enabled or time reduced",
596
+ "A feature, epic or service catalogue entry with a 'value', 'benefit' or 'business value' field describing what a user or customer gains"
597
+ ],
598
+ "x-dr-distinguish": {
599
+ "motivation.outcome": "the statement describes an end result the organization intends or has achieved, such as a measurable state change, rather than why that result is worth something to a stakeholder",
600
+ "motivation.goal": "the statement expresses a desired direction or end state the organization strives toward, not the benefit a stakeholder derives",
601
+ "motivation.meaning": "the statement gives the interpretation or definition of a concept in a context, not its worth or importance",
602
+ "motivation.driver": "the statement describes a condition or force that motivates change, such as market pressure or regulation, rather than a benefit delivered"
603
+ },
475
604
  "$id": "urn:dr:spec:node:motivation.value"
476
605
  }
477
606
  },
478
607
  "relationshipSchemas": {
479
- "motivation.assessment.associated-with.motivation.constraint": {
480
- "id": "motivation.assessment.associated-with.motivation.constraint",
481
- "source_spec_node_id": "motivation.assessment",
482
- "source_layer": "motivation",
483
- "destination_spec_node_id": "motivation.constraint",
484
- "destination_layer": "motivation",
485
- "predicate": "associated-with",
486
- "cardinality": "many-to-many",
487
- "strength": "medium",
488
- "required": false
489
- },
490
- "motivation.assessment.associated-with.motivation.outcome": {
491
- "id": "motivation.assessment.associated-with.motivation.outcome",
608
+ "motivation.assessment.associated-with.motivation.driver": {
609
+ "id": "motivation.assessment.associated-with.motivation.driver",
492
610
  "source_spec_node_id": "motivation.assessment",
493
611
  "source_layer": "motivation",
494
- "destination_spec_node_id": "motivation.outcome",
612
+ "destination_spec_node_id": "motivation.driver",
495
613
  "destination_layer": "motivation",
496
614
  "predicate": "associated-with",
497
615
  "cardinality": "many-to-many",
498
616
  "strength": "medium",
499
- "required": false
617
+ "required": false,
618
+ "description": "The assessment evaluates the driver, such as a gap analysis of how far the organization is from meeting a new regulation. Use influence instead when the finding shapes a goal, requirement or principle."
500
619
  },
501
620
  "motivation.assessment.influence.motivation.assessment": {
502
621
  "id": "motivation.assessment.influence.motivation.assessment",
@@ -507,29 +626,32 @@
507
626
  "predicate": "influence",
508
627
  "cardinality": "many-to-many",
509
628
  "strength": "medium",
510
- "required": false
629
+ "required": false,
630
+ "description": "One finding leads to or changes another, such as a risk assessment that prompts a feasibility review."
511
631
  },
512
- "motivation.assessment.influence.motivation.driver": {
513
- "id": "motivation.assessment.influence.motivation.driver",
632
+ "motivation.assessment.influence.motivation.goal": {
633
+ "id": "motivation.assessment.influence.motivation.goal",
514
634
  "source_spec_node_id": "motivation.assessment",
515
635
  "source_layer": "motivation",
516
- "destination_spec_node_id": "motivation.driver",
636
+ "destination_spec_node_id": "motivation.goal",
517
637
  "destination_layer": "motivation",
518
638
  "predicate": "influence",
519
639
  "cardinality": "many-to-many",
520
640
  "strength": "medium",
521
- "required": false
641
+ "required": false,
642
+ "description": "The finding shapes a goal: a weakness or opportunity the organization decides to act on becomes, or changes, an end state it pursues."
522
643
  },
523
- "motivation.assessment.influence.motivation.goal": {
524
- "id": "motivation.assessment.influence.motivation.goal",
644
+ "motivation.assessment.influence.motivation.outcome": {
645
+ "id": "motivation.assessment.influence.motivation.outcome",
525
646
  "source_spec_node_id": "motivation.assessment",
526
647
  "source_layer": "motivation",
527
- "destination_spec_node_id": "motivation.goal",
648
+ "destination_spec_node_id": "motivation.outcome",
528
649
  "destination_layer": "motivation",
529
650
  "predicate": "influence",
530
651
  "cardinality": "many-to-many",
531
652
  "strength": "medium",
532
- "required": false
653
+ "required": false,
654
+ "description": "The finding shapes an outcome, such as a measured gap that sets the target value of the outcome meant to close it."
533
655
  },
534
656
  "motivation.assessment.influence.motivation.principle": {
535
657
  "id": "motivation.assessment.influence.motivation.principle",
@@ -540,7 +662,8 @@
540
662
  "predicate": "influence",
541
663
  "cardinality": "many-to-many",
542
664
  "strength": "medium",
543
- "required": false
665
+ "required": false,
666
+ "description": "The finding shapes a principle, such as repeated integration failures leading to a 'prefer asynchronous messaging' principle."
544
667
  },
545
668
  "motivation.assessment.influence.motivation.requirement": {
546
669
  "id": "motivation.assessment.influence.motivation.requirement",
@@ -551,7 +674,8 @@
551
674
  "predicate": "influence",
552
675
  "cardinality": "many-to-many",
553
676
  "strength": "medium",
554
- "required": false
677
+ "required": false,
678
+ "description": "The finding shapes a requirement, such as 'logs store PII unencrypted' leading to 'logs must not contain PII'."
555
679
  },
556
680
  "motivation.constraint.constrains.motivation.requirement": {
557
681
  "id": "motivation.constraint.constrains.motivation.requirement",
@@ -562,7 +686,8 @@
562
686
  "predicate": "constrains",
563
687
  "cardinality": "many-to-many",
564
688
  "strength": "medium",
565
- "required": false
689
+ "required": false,
690
+ "description": "The constraint limits how the requirement may be met, such as a mandated cloud provider restricting how an availability requirement is satisfied. Use influence instead when the constraint shapes a goal, outcome or principle rather than limiting a requirement."
566
691
  },
567
692
  "motivation.constraint.influence.motivation.assessment": {
568
693
  "id": "motivation.constraint.influence.motivation.assessment",
@@ -573,7 +698,8 @@
573
698
  "predicate": "influence",
574
699
  "cardinality": "many-to-many",
575
700
  "strength": "medium",
576
- "required": false
701
+ "required": false,
702
+ "description": "The constraint changes a finding, such as a budget ceiling turning an option the assessment rated feasible into an infeasible one."
577
703
  },
578
704
  "motivation.constraint.influence.motivation.goal": {
579
705
  "id": "motivation.constraint.influence.motivation.goal",
@@ -584,7 +710,8 @@
584
710
  "predicate": "influence",
585
711
  "cardinality": "many-to-many",
586
712
  "strength": "medium",
587
- "required": false
713
+ "required": false,
714
+ "description": "The constraint shapes a goal, narrowing or redirecting the end state the organization can pursue, such as a deadline that scopes a modernization goal."
588
715
  },
589
716
  "motivation.constraint.influence.motivation.outcome": {
590
717
  "id": "motivation.constraint.influence.motivation.outcome",
@@ -595,7 +722,8 @@
595
722
  "predicate": "influence",
596
723
  "cardinality": "many-to-many",
597
724
  "strength": "medium",
598
- "required": false
725
+ "required": false,
726
+ "description": "The constraint shapes an outcome, such as a budget ceiling that lowers the target value an outcome can reach."
599
727
  },
600
728
  "motivation.constraint.influence.motivation.principle": {
601
729
  "id": "motivation.constraint.influence.motivation.principle",
@@ -606,18 +734,8 @@
606
734
  "predicate": "influence",
607
735
  "cardinality": "many-to-many",
608
736
  "strength": "medium",
609
- "required": false
610
- },
611
- "motivation.constraint.influence.motivation.requirement": {
612
- "id": "motivation.constraint.influence.motivation.requirement",
613
- "source_spec_node_id": "motivation.constraint",
614
- "source_layer": "motivation",
615
- "destination_spec_node_id": "motivation.requirement",
616
- "destination_layer": "motivation",
617
- "predicate": "influence",
618
- "cardinality": "many-to-many",
619
- "strength": "medium",
620
- "required": false
737
+ "required": false,
738
+ "description": "The constraint shapes a principle, such as a data-residency rule leading to a 'keep customer data in region' principle."
621
739
  },
622
740
  "motivation.constraint.specializes.motivation.constraint": {
623
741
  "id": "motivation.constraint.specializes.motivation.constraint",
@@ -628,40 +746,32 @@
628
746
  "predicate": "specializes",
629
747
  "cardinality": "many-to-many",
630
748
  "strength": "medium",
631
- "required": false
632
- },
633
- "motivation.driver.associated-with.motivation.constraint": {
634
- "id": "motivation.driver.associated-with.motivation.constraint",
635
- "source_spec_node_id": "motivation.driver",
636
- "source_layer": "motivation",
637
- "destination_spec_node_id": "motivation.constraint",
638
- "destination_layer": "motivation",
639
- "predicate": "associated-with",
640
- "cardinality": "many-to-many",
641
- "strength": "medium",
642
- "required": false
749
+ "required": false,
750
+ "description": "The constraint is a narrower case of a more general constraint, such as 'EU data stays in Frankfurt' specializing 'EU data stays in the EU'."
643
751
  },
644
- "motivation.driver.associated-with.motivation.value": {
645
- "id": "motivation.driver.associated-with.motivation.value",
752
+ "motivation.driver.influence.motivation.assessment": {
753
+ "id": "motivation.driver.influence.motivation.assessment",
646
754
  "source_spec_node_id": "motivation.driver",
647
755
  "source_layer": "motivation",
648
- "destination_spec_node_id": "motivation.value",
756
+ "destination_spec_node_id": "motivation.assessment",
649
757
  "destination_layer": "motivation",
650
- "predicate": "associated-with",
758
+ "predicate": "influence",
651
759
  "cardinality": "many-to-many",
652
760
  "strength": "medium",
653
- "required": false
761
+ "required": false,
762
+ "description": "The driver prompts or frames an assessment, such as a new regulation prompting a compliance gap analysis. Use the assessment's association instead to record which driver an assessment evaluates."
654
763
  },
655
- "motivation.driver.influence.motivation.assessment": {
656
- "id": "motivation.driver.influence.motivation.assessment",
764
+ "motivation.driver.influence.motivation.constraint": {
765
+ "id": "motivation.driver.influence.motivation.constraint",
657
766
  "source_spec_node_id": "motivation.driver",
658
767
  "source_layer": "motivation",
659
- "destination_spec_node_id": "motivation.assessment",
768
+ "destination_spec_node_id": "motivation.constraint",
660
769
  "destination_layer": "motivation",
661
770
  "predicate": "influence",
662
771
  "cardinality": "many-to-many",
663
772
  "strength": "medium",
664
- "required": false
773
+ "required": false,
774
+ "description": "The driver gives rise to a constraint, such as a regulation that forbids storing data outside a jurisdiction."
665
775
  },
666
776
  "motivation.driver.influence.motivation.driver": {
667
777
  "id": "motivation.driver.influence.motivation.driver",
@@ -672,7 +782,8 @@
672
782
  "predicate": "influence",
673
783
  "cardinality": "many-to-many",
674
784
  "strength": "medium",
675
- "required": false
785
+ "required": false,
786
+ "description": "One driver strengthens or causes another, such as rising cloud cost adding to pressure to consolidate platforms."
676
787
  },
677
788
  "motivation.driver.influence.motivation.goal": {
678
789
  "id": "motivation.driver.influence.motivation.goal",
@@ -683,7 +794,8 @@
683
794
  "predicate": "influence",
684
795
  "cardinality": "many-to-many",
685
796
  "strength": "medium",
686
- "required": false
797
+ "required": false,
798
+ "description": "The driver prompts or changes a goal: the condition the organization responds to shapes the end state it sets out to reach."
687
799
  },
688
800
  "motivation.driver.influence.motivation.outcome": {
689
801
  "id": "motivation.driver.influence.motivation.outcome",
@@ -694,7 +806,8 @@
694
806
  "predicate": "influence",
695
807
  "cardinality": "many-to-many",
696
808
  "strength": "medium",
697
- "required": false
809
+ "required": false,
810
+ "description": "The driver prompts or changes an outcome, such as market pressure setting a time-to-market target."
698
811
  },
699
812
  "motivation.driver.influence.motivation.principle": {
700
813
  "id": "motivation.driver.influence.motivation.principle",
@@ -705,7 +818,8 @@
705
818
  "predicate": "influence",
706
819
  "cardinality": "many-to-many",
707
820
  "strength": "medium",
708
- "required": false
821
+ "required": false,
822
+ "description": "The driver prompts a principle, such as technical debt leading to a 'retire before you build' principle."
709
823
  },
710
824
  "motivation.driver.influence.motivation.requirement": {
711
825
  "id": "motivation.driver.influence.motivation.requirement",
@@ -716,7 +830,8 @@
716
830
  "predicate": "influence",
717
831
  "cardinality": "many-to-many",
718
832
  "strength": "medium",
719
- "required": false
833
+ "required": false,
834
+ "description": "The driver prompts a requirement directly, such as a regulation that a system must log consent. Use the goal and outcome links instead when the driver works through an intended end state."
720
835
  },
721
836
  "motivation.goal.aggregates.motivation.goal": {
722
837
  "id": "motivation.goal.aggregates.motivation.goal",
@@ -727,40 +842,8 @@
727
842
  "predicate": "aggregates",
728
843
  "cardinality": "many-to-many",
729
844
  "strength": "medium",
730
- "required": false
731
- },
732
- "motivation.goal.aggregates.motivation.requirement": {
733
- "id": "motivation.goal.aggregates.motivation.requirement",
734
- "source_spec_node_id": "motivation.goal",
735
- "source_layer": "motivation",
736
- "destination_spec_node_id": "motivation.requirement",
737
- "destination_layer": "motivation",
738
- "predicate": "aggregates",
739
- "cardinality": "many-to-many",
740
- "strength": "medium",
741
- "required": false
742
- },
743
- "motivation.goal.associated-with.motivation.constraint": {
744
- "id": "motivation.goal.associated-with.motivation.constraint",
745
- "source_spec_node_id": "motivation.goal",
746
- "source_layer": "motivation",
747
- "destination_spec_node_id": "motivation.constraint",
748
- "destination_layer": "motivation",
749
- "predicate": "associated-with",
750
- "cardinality": "many-to-many",
751
- "strength": "medium",
752
- "required": false
753
- },
754
- "motivation.goal.influence.motivation.assessment": {
755
- "id": "motivation.goal.influence.motivation.assessment",
756
- "source_spec_node_id": "motivation.goal",
757
- "source_layer": "motivation",
758
- "destination_spec_node_id": "motivation.assessment",
759
- "destination_layer": "motivation",
760
- "predicate": "influence",
761
- "cardinality": "many-to-many",
762
- "strength": "medium",
763
- "required": false
845
+ "required": false,
846
+ "description": "The goal is made up of narrower sub-goals, each part of reaching it. Use specializes instead when the narrower goal is a variant of the general one rather than a part of it."
764
847
  },
765
848
  "motivation.goal.influence.motivation.goal": {
766
849
  "id": "motivation.goal.influence.motivation.goal",
@@ -771,7 +854,8 @@
771
854
  "predicate": "influence",
772
855
  "cardinality": "many-to-many",
773
856
  "strength": "medium",
774
- "required": false
857
+ "required": false,
858
+ "description": "One goal contributes to or conflicts with another without being part of it, such as 'reduce cost' working against 'improve resilience'."
775
859
  },
776
860
  "motivation.goal.influence.motivation.outcome": {
777
861
  "id": "motivation.goal.influence.motivation.outcome",
@@ -782,7 +866,8 @@
782
866
  "predicate": "influence",
783
867
  "cardinality": "many-to-many",
784
868
  "strength": "medium",
785
- "required": false
869
+ "required": false,
870
+ "description": "The goal shapes which outcomes are set and what their targets are. Use the outcome's realizes instead to record that reaching the outcome achieves the goal."
786
871
  },
787
872
  "motivation.goal.influence.motivation.principle": {
788
873
  "id": "motivation.goal.influence.motivation.principle",
@@ -793,7 +878,8 @@
793
878
  "predicate": "influence",
794
879
  "cardinality": "many-to-many",
795
880
  "strength": "medium",
796
- "required": false
881
+ "required": false,
882
+ "description": "The goal prompts or shapes a principle that guides decisions toward it, such as 'reduce time to market' leading to 'prefer managed services'."
797
883
  },
798
884
  "motivation.goal.influence.motivation.requirement": {
799
885
  "id": "motivation.goal.influence.motivation.requirement",
@@ -804,29 +890,8 @@
804
890
  "predicate": "influence",
805
891
  "cardinality": "many-to-many",
806
892
  "strength": "medium",
807
- "required": false
808
- },
809
- "motivation.goal.realizes.motivation.goal": {
810
- "id": "motivation.goal.realizes.motivation.goal",
811
- "source_spec_node_id": "motivation.goal",
812
- "source_layer": "motivation",
813
- "destination_spec_node_id": "motivation.goal",
814
- "destination_layer": "motivation",
815
- "predicate": "realizes",
816
- "cardinality": "many-to-many",
817
- "strength": "medium",
818
- "required": false
819
- },
820
- "motivation.goal.realizes.motivation.value": {
821
- "id": "motivation.goal.realizes.motivation.value",
822
- "source_spec_node_id": "motivation.goal",
823
- "source_layer": "motivation",
824
- "destination_spec_node_id": "motivation.value",
825
- "destination_layer": "motivation",
826
- "predicate": "realizes",
827
- "cardinality": "many-to-many",
828
- "strength": "medium",
829
- "required": false
893
+ "required": false,
894
+ "description": "The goal shapes a requirement without the requirement fully realizing it. Use the requirement's realizes instead when meeting the requirement makes the goal concrete."
830
895
  },
831
896
  "motivation.goal.specializes.motivation.goal": {
832
897
  "id": "motivation.goal.specializes.motivation.goal",
@@ -837,18 +902,8 @@
837
902
  "predicate": "specializes",
838
903
  "cardinality": "many-to-many",
839
904
  "strength": "medium",
840
- "required": false
841
- },
842
- "motivation.goal.supports.motivation.principle": {
843
- "id": "motivation.goal.supports.motivation.principle",
844
- "source_spec_node_id": "motivation.goal",
845
- "source_layer": "motivation",
846
- "destination_spec_node_id": "motivation.principle",
847
- "destination_layer": "motivation",
848
- "predicate": "supports",
849
- "cardinality": "many-to-many",
850
- "strength": "medium",
851
- "required": false
905
+ "required": false,
906
+ "description": "The goal is a narrower variant of a more general goal, such as 'improve mobile checkout' specializing 'improve checkout'."
852
907
  },
853
908
  "motivation.meaning.associated-with.motivation.constraint": {
854
909
  "id": "motivation.meaning.associated-with.motivation.constraint",
@@ -859,7 +914,8 @@
859
914
  "predicate": "associated-with",
860
915
  "cardinality": "many-to-many",
861
916
  "strength": "medium",
862
- "required": false
917
+ "required": false,
918
+ "description": "The meaning explains a term or concept the constraint relies on, such as what 'personal data' covers in a data-residency constraint."
863
919
  },
864
920
  "motivation.meaning.associated-with.motivation.driver": {
865
921
  "id": "motivation.meaning.associated-with.motivation.driver",
@@ -870,7 +926,8 @@
870
926
  "predicate": "associated-with",
871
927
  "cardinality": "many-to-many",
872
928
  "strength": "medium",
873
- "required": false
929
+ "required": false,
930
+ "description": "The meaning explains how stakeholders interpret the driver or a term it uses, such as what a regulation's 'processor' means in this organization."
874
931
  },
875
932
  "motivation.meaning.associated-with.motivation.goal": {
876
933
  "id": "motivation.meaning.associated-with.motivation.goal",
@@ -881,7 +938,8 @@
881
938
  "predicate": "associated-with",
882
939
  "cardinality": "many-to-many",
883
940
  "strength": "medium",
884
- "required": false
941
+ "required": false,
942
+ "description": "The meaning explains a term or concept the goal relies on, such as what 'active customer' means in a retention goal."
885
943
  },
886
944
  "motivation.meaning.associated-with.motivation.outcome": {
887
945
  "id": "motivation.meaning.associated-with.motivation.outcome",
@@ -892,62 +950,68 @@
892
950
  "predicate": "associated-with",
893
951
  "cardinality": "many-to-many",
894
952
  "strength": "medium",
895
- "required": false
953
+ "required": false,
954
+ "description": "The meaning explains how a term in the outcome is interpreted, such as how 'resolved' is defined for a ticket-resolution target."
896
955
  },
897
- "motivation.meaning.associated-with.motivation.stakeholder": {
898
- "id": "motivation.meaning.associated-with.motivation.stakeholder",
956
+ "motivation.meaning.associated-with.motivation.principle": {
957
+ "id": "motivation.meaning.associated-with.motivation.principle",
899
958
  "source_spec_node_id": "motivation.meaning",
900
959
  "source_layer": "motivation",
901
- "destination_spec_node_id": "motivation.stakeholder",
960
+ "destination_spec_node_id": "motivation.principle",
902
961
  "destination_layer": "motivation",
903
962
  "predicate": "associated-with",
904
963
  "cardinality": "many-to-many",
905
964
  "strength": "medium",
906
- "required": false
965
+ "required": false,
966
+ "description": "The meaning explains a term or concept the principle relies on, such as what counts as a 'managed service'."
907
967
  },
908
- "motivation.meaning.associated-with.motivation.value": {
909
- "id": "motivation.meaning.associated-with.motivation.value",
968
+ "motivation.meaning.associated-with.motivation.requirement": {
969
+ "id": "motivation.meaning.associated-with.motivation.requirement",
910
970
  "source_spec_node_id": "motivation.meaning",
911
971
  "source_layer": "motivation",
912
- "destination_spec_node_id": "motivation.value",
972
+ "destination_spec_node_id": "motivation.requirement",
913
973
  "destination_layer": "motivation",
914
974
  "predicate": "associated-with",
915
975
  "cardinality": "many-to-many",
916
976
  "strength": "medium",
917
- "required": false
977
+ "required": false,
978
+ "description": "The meaning explains a term or concept the requirement relies on, such as the definition of 'session' in a timeout requirement."
918
979
  },
919
- "motivation.outcome.associated-with.motivation.constraint": {
920
- "id": "motivation.outcome.associated-with.motivation.constraint",
921
- "source_spec_node_id": "motivation.outcome",
980
+ "motivation.meaning.associated-with.motivation.stakeholder": {
981
+ "id": "motivation.meaning.associated-with.motivation.stakeholder",
982
+ "source_spec_node_id": "motivation.meaning",
922
983
  "source_layer": "motivation",
923
- "destination_spec_node_id": "motivation.constraint",
984
+ "destination_spec_node_id": "motivation.stakeholder",
924
985
  "destination_layer": "motivation",
925
986
  "predicate": "associated-with",
926
987
  "cardinality": "many-to-many",
927
988
  "strength": "medium",
928
- "required": false
989
+ "required": false,
990
+ "description": "The meaning is the interpretation a stakeholder attaches to a concept, recording whose understanding it is."
929
991
  },
930
- "motivation.outcome.associated-with.motivation.driver": {
931
- "id": "motivation.outcome.associated-with.motivation.driver",
932
- "source_spec_node_id": "motivation.outcome",
992
+ "motivation.meaning.associated-with.motivation.value": {
993
+ "id": "motivation.meaning.associated-with.motivation.value",
994
+ "source_spec_node_id": "motivation.meaning",
933
995
  "source_layer": "motivation",
934
- "destination_spec_node_id": "motivation.driver",
996
+ "destination_spec_node_id": "motivation.value",
935
997
  "destination_layer": "motivation",
936
998
  "predicate": "associated-with",
937
999
  "cardinality": "many-to-many",
938
1000
  "strength": "medium",
939
- "required": false
1001
+ "required": false,
1002
+ "description": "The meaning explains how stakeholders interpret a value, such as what 'convenience' means to a customer segment."
940
1003
  },
941
- "motivation.outcome.associated-with.motivation.outcome": {
942
- "id": "motivation.outcome.associated-with.motivation.outcome",
1004
+ "motivation.outcome.aggregates.motivation.outcome": {
1005
+ "id": "motivation.outcome.aggregates.motivation.outcome",
943
1006
  "source_spec_node_id": "motivation.outcome",
944
1007
  "source_layer": "motivation",
945
1008
  "destination_spec_node_id": "motivation.outcome",
946
1009
  "destination_layer": "motivation",
947
- "predicate": "associated-with",
1010
+ "predicate": "aggregates",
948
1011
  "cardinality": "many-to-many",
949
1012
  "strength": "medium",
950
- "required": false
1013
+ "required": false,
1014
+ "description": "The outcome is made up of narrower outcomes, each a measurable part of it, such as regional targets that make up a global one."
951
1015
  },
952
1016
  "motivation.outcome.associated-with.motivation.stakeholder": {
953
1017
  "id": "motivation.outcome.associated-with.motivation.stakeholder",
@@ -958,18 +1022,8 @@
958
1022
  "predicate": "associated-with",
959
1023
  "cardinality": "many-to-many",
960
1024
  "strength": "medium",
961
- "required": false
962
- },
963
- "motivation.outcome.influence.motivation.goal": {
964
- "id": "motivation.outcome.influence.motivation.goal",
965
- "source_spec_node_id": "motivation.outcome",
966
- "source_layer": "motivation",
967
- "destination_spec_node_id": "motivation.goal",
968
- "destination_layer": "motivation",
969
- "predicate": "influence",
970
- "cardinality": "many-to-many",
971
- "strength": "medium",
972
- "required": false
1025
+ "required": false,
1026
+ "description": "The stakeholder has a stake in the outcome: it is the party who cares whether the outcome is reached."
973
1027
  },
974
1028
  "motivation.outcome.realizes.motivation.goal": {
975
1029
  "id": "motivation.outcome.realizes.motivation.goal",
@@ -980,29 +1034,8 @@
980
1034
  "predicate": "realizes",
981
1035
  "cardinality": "many-to-many",
982
1036
  "strength": "medium",
983
- "required": false
984
- },
985
- "motivation.outcome.realizes.motivation.value": {
986
- "id": "motivation.outcome.realizes.motivation.value",
987
- "source_spec_node_id": "motivation.outcome",
988
- "source_layer": "motivation",
989
- "destination_spec_node_id": "motivation.value",
990
- "destination_layer": "motivation",
991
- "predicate": "realizes",
992
- "cardinality": "many-to-many",
993
- "strength": "medium",
994
- "required": false
995
- },
996
- "motivation.principle.associated-with.motivation.value": {
997
- "id": "motivation.principle.associated-with.motivation.value",
998
- "source_spec_node_id": "motivation.principle",
999
- "source_layer": "motivation",
1000
- "destination_spec_node_id": "motivation.value",
1001
- "destination_layer": "motivation",
1002
- "predicate": "associated-with",
1003
- "cardinality": "many-to-many",
1004
- "strength": "medium",
1005
- "required": false
1037
+ "required": false,
1038
+ "description": "Reaching the outcome achieves the goal, or the part of it the outcome measures. This is the link from a measurable result to the end state it makes concrete."
1006
1039
  },
1007
1040
  "motivation.principle.influence.motivation.assessment": {
1008
1041
  "id": "motivation.principle.influence.motivation.assessment",
@@ -1013,7 +1046,8 @@
1013
1046
  "predicate": "influence",
1014
1047
  "cardinality": "many-to-many",
1015
1048
  "strength": "medium",
1016
- "required": false
1049
+ "required": false,
1050
+ "description": "The principle frames how a situation is judged, such as a 'prefer open standards' principle shaping an assessment of a vendor lock-in risk."
1017
1051
  },
1018
1052
  "motivation.principle.influence.motivation.goal": {
1019
1053
  "id": "motivation.principle.influence.motivation.goal",
@@ -1024,7 +1058,8 @@
1024
1058
  "predicate": "influence",
1025
1059
  "cardinality": "many-to-many",
1026
1060
  "strength": "medium",
1027
- "required": false
1061
+ "required": false,
1062
+ "description": "The principle shapes a goal, guiding which end states are pursued or how."
1028
1063
  },
1029
1064
  "motivation.principle.influence.motivation.principle": {
1030
1065
  "id": "motivation.principle.influence.motivation.principle",
@@ -1035,7 +1070,8 @@
1035
1070
  "predicate": "influence",
1036
1071
  "cardinality": "many-to-many",
1037
1072
  "strength": "medium",
1038
- "required": false
1073
+ "required": false,
1074
+ "description": "One principle shapes or refines another, such as an enterprise principle shaping a domain principle."
1039
1075
  },
1040
1076
  "motivation.principle.influence.motivation.requirement": {
1041
1077
  "id": "motivation.principle.influence.motivation.requirement",
@@ -1046,29 +1082,8 @@
1046
1082
  "predicate": "influence",
1047
1083
  "cardinality": "many-to-many",
1048
1084
  "strength": "medium",
1049
- "required": false
1050
- },
1051
- "motivation.principle.realizes.motivation.goal": {
1052
- "id": "motivation.principle.realizes.motivation.goal",
1053
- "source_spec_node_id": "motivation.principle",
1054
- "source_layer": "motivation",
1055
- "destination_spec_node_id": "motivation.goal",
1056
- "destination_layer": "motivation",
1057
- "predicate": "realizes",
1058
- "cardinality": "many-to-many",
1059
- "strength": "medium",
1060
- "required": false
1061
- },
1062
- "motivation.requirement.aggregates.motivation.goal": {
1063
- "id": "motivation.requirement.aggregates.motivation.goal",
1064
- "source_spec_node_id": "motivation.requirement",
1065
- "source_layer": "motivation",
1066
- "destination_spec_node_id": "motivation.goal",
1067
- "destination_layer": "motivation",
1068
- "predicate": "aggregates",
1069
- "cardinality": "many-to-many",
1070
- "strength": "medium",
1071
- "required": false
1085
+ "required": false,
1086
+ "description": "The principle shapes a requirement without the requirement fully applying it. Use the requirement's realizes instead when the requirement makes the principle concrete for one system."
1072
1087
  },
1073
1088
  "motivation.requirement.aggregates.motivation.requirement": {
1074
1089
  "id": "motivation.requirement.aggregates.motivation.requirement",
@@ -1079,84 +1094,44 @@
1079
1094
  "predicate": "aggregates",
1080
1095
  "cardinality": "many-to-many",
1081
1096
  "strength": "medium",
1082
- "required": false
1083
- },
1084
- "motivation.requirement.associated-with.motivation.constraint": {
1085
- "id": "motivation.requirement.associated-with.motivation.constraint",
1086
- "source_spec_node_id": "motivation.requirement",
1087
- "source_layer": "motivation",
1088
- "destination_spec_node_id": "motivation.constraint",
1089
- "destination_layer": "motivation",
1090
- "predicate": "associated-with",
1091
- "cardinality": "many-to-many",
1092
- "strength": "medium",
1093
- "required": false
1097
+ "required": false,
1098
+ "description": "The requirement is made up of narrower requirements, each part of meeting it. Use specializes instead when the narrower requirement is a variant rather than a part."
1094
1099
  },
1095
- "motivation.requirement.associated-with.motivation.driver": {
1096
- "id": "motivation.requirement.associated-with.motivation.driver",
1097
- "source_spec_node_id": "motivation.requirement",
1098
- "source_layer": "motivation",
1099
- "destination_spec_node_id": "motivation.driver",
1100
- "destination_layer": "motivation",
1101
- "predicate": "associated-with",
1102
- "cardinality": "many-to-many",
1103
- "strength": "medium",
1104
- "required": false
1105
- },
1106
- "motivation.requirement.associated-with.motivation.goal": {
1107
- "id": "motivation.requirement.associated-with.motivation.goal",
1100
+ "motivation.requirement.realizes.motivation.goal": {
1101
+ "id": "motivation.requirement.realizes.motivation.goal",
1108
1102
  "source_spec_node_id": "motivation.requirement",
1109
1103
  "source_layer": "motivation",
1110
1104
  "destination_spec_node_id": "motivation.goal",
1111
1105
  "destination_layer": "motivation",
1112
- "predicate": "associated-with",
1106
+ "predicate": "realizes",
1113
1107
  "cardinality": "many-to-many",
1114
1108
  "strength": "medium",
1115
- "required": false
1109
+ "required": false,
1110
+ "description": "Meeting the requirement makes the goal concrete for a system or solution: the requirement is how the goal is refined into something verifiable."
1116
1111
  },
1117
- "motivation.requirement.associated-with.motivation.outcome": {
1118
- "id": "motivation.requirement.associated-with.motivation.outcome",
1112
+ "motivation.requirement.realizes.motivation.outcome": {
1113
+ "id": "motivation.requirement.realizes.motivation.outcome",
1119
1114
  "source_spec_node_id": "motivation.requirement",
1120
1115
  "source_layer": "motivation",
1121
1116
  "destination_spec_node_id": "motivation.outcome",
1122
1117
  "destination_layer": "motivation",
1123
- "predicate": "associated-with",
1124
- "cardinality": "many-to-many",
1125
- "strength": "medium",
1126
- "required": false
1127
- },
1128
- "motivation.requirement.associated-with.motivation.stakeholder": {
1129
- "id": "motivation.requirement.associated-with.motivation.stakeholder",
1130
- "source_spec_node_id": "motivation.requirement",
1131
- "source_layer": "motivation",
1132
- "destination_spec_node_id": "motivation.stakeholder",
1133
- "destination_layer": "motivation",
1134
- "predicate": "associated-with",
1135
- "cardinality": "many-to-many",
1136
- "strength": "medium",
1137
- "required": false
1138
- },
1139
- "motivation.requirement.associated-with.motivation.value": {
1140
- "id": "motivation.requirement.associated-with.motivation.value",
1141
- "source_spec_node_id": "motivation.requirement",
1142
- "source_layer": "motivation",
1143
- "destination_spec_node_id": "motivation.value",
1144
- "destination_layer": "motivation",
1145
- "predicate": "associated-with",
1118
+ "predicate": "realizes",
1146
1119
  "cardinality": "many-to-many",
1147
1120
  "strength": "medium",
1148
- "required": false
1121
+ "required": false,
1122
+ "description": "Meeting the requirement makes the outcome concrete, such as a latency requirement that delivers a response-time target."
1149
1123
  },
1150
- "motivation.requirement.realizes.motivation.goal": {
1151
- "id": "motivation.requirement.realizes.motivation.goal",
1124
+ "motivation.requirement.realizes.motivation.principle": {
1125
+ "id": "motivation.requirement.realizes.motivation.principle",
1152
1126
  "source_spec_node_id": "motivation.requirement",
1153
1127
  "source_layer": "motivation",
1154
- "destination_spec_node_id": "motivation.goal",
1128
+ "destination_spec_node_id": "motivation.principle",
1155
1129
  "destination_layer": "motivation",
1156
1130
  "predicate": "realizes",
1157
1131
  "cardinality": "many-to-many",
1158
1132
  "strength": "medium",
1159
- "required": false
1133
+ "required": false,
1134
+ "description": "The requirement applies the principle to one system or solution, making a general rule concrete and verifiable."
1160
1135
  },
1161
1136
  "motivation.requirement.specializes.motivation.requirement": {
1162
1137
  "id": "motivation.requirement.specializes.motivation.requirement",
@@ -1167,40 +1142,44 @@
1167
1142
  "predicate": "specializes",
1168
1143
  "cardinality": "many-to-many",
1169
1144
  "strength": "medium",
1170
- "required": false
1145
+ "required": false,
1146
+ "description": "The requirement is a narrower variant of a more general one, such as 'encrypt backups with AES-256' specializing 'encrypt data at rest'."
1171
1147
  },
1172
- "motivation.stakeholder.associated-with.motivation.constraint": {
1173
- "id": "motivation.stakeholder.associated-with.motivation.constraint",
1148
+ "motivation.stakeholder.aggregates.motivation.stakeholder": {
1149
+ "id": "motivation.stakeholder.aggregates.motivation.stakeholder",
1174
1150
  "source_spec_node_id": "motivation.stakeholder",
1175
1151
  "source_layer": "motivation",
1176
- "destination_spec_node_id": "motivation.constraint",
1152
+ "destination_spec_node_id": "motivation.stakeholder",
1177
1153
  "destination_layer": "motivation",
1178
- "predicate": "associated-with",
1154
+ "predicate": "aggregates",
1179
1155
  "cardinality": "many-to-many",
1180
1156
  "strength": "medium",
1181
- "required": false
1157
+ "required": false,
1158
+ "description": "The stakeholder group is made up of narrower stakeholders, such as a business unit that includes several teams."
1182
1159
  },
1183
- "motivation.stakeholder.associated-with.motivation.driver": {
1184
- "id": "motivation.stakeholder.associated-with.motivation.driver",
1160
+ "motivation.stakeholder.associated-with.motivation.constraint": {
1161
+ "id": "motivation.stakeholder.associated-with.motivation.constraint",
1185
1162
  "source_spec_node_id": "motivation.stakeholder",
1186
1163
  "source_layer": "motivation",
1187
- "destination_spec_node_id": "motivation.driver",
1164
+ "destination_spec_node_id": "motivation.constraint",
1188
1165
  "destination_layer": "motivation",
1189
1166
  "predicate": "associated-with",
1190
1167
  "cardinality": "many-to-many",
1191
1168
  "strength": "medium",
1192
- "required": false
1169
+ "required": false,
1170
+ "description": "The stakeholder is concerned with the constraint, such as the legal department with a data-residency rule."
1193
1171
  },
1194
- "motivation.stakeholder.associated-with.motivation.goal": {
1195
- "id": "motivation.stakeholder.associated-with.motivation.goal",
1172
+ "motivation.stakeholder.associated-with.motivation.driver": {
1173
+ "id": "motivation.stakeholder.associated-with.motivation.driver",
1196
1174
  "source_spec_node_id": "motivation.stakeholder",
1197
1175
  "source_layer": "motivation",
1198
- "destination_spec_node_id": "motivation.goal",
1176
+ "destination_spec_node_id": "motivation.driver",
1199
1177
  "destination_layer": "motivation",
1200
1178
  "predicate": "associated-with",
1201
1179
  "cardinality": "many-to-many",
1202
1180
  "strength": "medium",
1203
- "required": false
1181
+ "required": false,
1182
+ "description": "The stakeholder holds the concern the driver expresses: the driver is why the stakeholder cares."
1204
1183
  },
1205
1184
  "motivation.stakeholder.associated-with.motivation.outcome": {
1206
1185
  "id": "motivation.stakeholder.associated-with.motivation.outcome",
@@ -1211,7 +1190,8 @@
1211
1190
  "predicate": "associated-with",
1212
1191
  "cardinality": "many-to-many",
1213
1192
  "strength": "medium",
1214
- "required": false
1193
+ "required": false,
1194
+ "description": "The stakeholder is concerned with the outcome, such as finance with a cost-reduction target."
1215
1195
  },
1216
1196
  "motivation.stakeholder.associated-with.motivation.principle": {
1217
1197
  "id": "motivation.stakeholder.associated-with.motivation.principle",
@@ -1222,7 +1202,8 @@
1222
1202
  "predicate": "associated-with",
1223
1203
  "cardinality": "many-to-many",
1224
1204
  "strength": "medium",
1225
- "required": false
1205
+ "required": false,
1206
+ "description": "The stakeholder is concerned with the principle, such as an architecture board with the principles it owns."
1226
1207
  },
1227
1208
  "motivation.stakeholder.associated-with.motivation.requirement": {
1228
1209
  "id": "motivation.stakeholder.associated-with.motivation.requirement",
@@ -1233,29 +1214,8 @@
1233
1214
  "predicate": "associated-with",
1234
1215
  "cardinality": "many-to-many",
1235
1216
  "strength": "medium",
1236
- "required": false
1237
- },
1238
- "motivation.stakeholder.associated-with.motivation.stakeholder": {
1239
- "id": "motivation.stakeholder.associated-with.motivation.stakeholder",
1240
- "source_spec_node_id": "motivation.stakeholder",
1241
- "source_layer": "motivation",
1242
- "destination_spec_node_id": "motivation.stakeholder",
1243
- "destination_layer": "motivation",
1244
- "predicate": "associated-with",
1245
- "cardinality": "many-to-many",
1246
- "strength": "medium",
1247
- "required": false
1248
- },
1249
- "motivation.stakeholder.associated-with.motivation.value": {
1250
- "id": "motivation.stakeholder.associated-with.motivation.value",
1251
- "source_spec_node_id": "motivation.stakeholder",
1252
- "source_layer": "motivation",
1253
- "destination_spec_node_id": "motivation.value",
1254
- "destination_layer": "motivation",
1255
- "predicate": "associated-with",
1256
- "cardinality": "many-to-many",
1257
- "strength": "medium",
1258
- "required": false
1217
+ "required": false,
1218
+ "description": "The stakeholder is concerned with the requirement, such as the user group a user story is written for."
1259
1219
  },
1260
1220
  "motivation.stakeholder.influence.motivation.assessment": {
1261
1221
  "id": "motivation.stakeholder.influence.motivation.assessment",
@@ -1266,29 +1226,32 @@
1266
1226
  "predicate": "influence",
1267
1227
  "cardinality": "many-to-many",
1268
1228
  "strength": "medium",
1269
- "required": false
1229
+ "required": false,
1230
+ "description": "The stakeholder shapes an assessment, such as a sponsor commissioning or contesting a finding."
1270
1231
  },
1271
- "motivation.stakeholder.influence.motivation.driver": {
1272
- "id": "motivation.stakeholder.influence.motivation.driver",
1232
+ "motivation.stakeholder.influence.motivation.goal": {
1233
+ "id": "motivation.stakeholder.influence.motivation.goal",
1273
1234
  "source_spec_node_id": "motivation.stakeholder",
1274
1235
  "source_layer": "motivation",
1275
- "destination_spec_node_id": "motivation.driver",
1236
+ "destination_spec_node_id": "motivation.goal",
1276
1237
  "destination_layer": "motivation",
1277
1238
  "predicate": "influence",
1278
1239
  "cardinality": "many-to-many",
1279
1240
  "strength": "medium",
1280
- "required": false
1241
+ "required": false,
1242
+ "description": "The stakeholder sets or shapes the goal. Use association instead when the stakeholder only has a stake in a goal it does not shape."
1281
1243
  },
1282
- "motivation.stakeholder.influence.motivation.goal": {
1283
- "id": "motivation.stakeholder.influence.motivation.goal",
1284
- "source_spec_node_id": "motivation.stakeholder",
1244
+ "motivation.value.aggregates.motivation.value": {
1245
+ "id": "motivation.value.aggregates.motivation.value",
1246
+ "source_spec_node_id": "motivation.value",
1285
1247
  "source_layer": "motivation",
1286
- "destination_spec_node_id": "motivation.goal",
1248
+ "destination_spec_node_id": "motivation.value",
1287
1249
  "destination_layer": "motivation",
1288
- "predicate": "influence",
1250
+ "predicate": "aggregates",
1289
1251
  "cardinality": "many-to-many",
1290
1252
  "strength": "medium",
1291
- "required": false
1253
+ "required": false,
1254
+ "description": "The value is made up of narrower values, such as 'lower total cost' made up of lower licence and lower operating cost."
1292
1255
  },
1293
1256
  "motivation.value.associated-with.motivation.constraint": {
1294
1257
  "id": "motivation.value.associated-with.motivation.constraint",
@@ -1299,7 +1262,8 @@
1299
1262
  "predicate": "associated-with",
1300
1263
  "cardinality": "many-to-many",
1301
1264
  "strength": "medium",
1302
- "required": false
1265
+ "required": false,
1266
+ "description": "The value is affected by the constraint, such as a budget ceiling that limits a value the solution can deliver."
1303
1267
  },
1304
1268
  "motivation.value.associated-with.motivation.driver": {
1305
1269
  "id": "motivation.value.associated-with.motivation.driver",
@@ -1310,7 +1274,8 @@
1310
1274
  "predicate": "associated-with",
1311
1275
  "cardinality": "many-to-many",
1312
1276
  "strength": "medium",
1313
- "required": false
1277
+ "required": false,
1278
+ "description": "The value is what responding to the driver is worth to stakeholders, such as avoided fines for a regulatory driver."
1314
1279
  },
1315
1280
  "motivation.value.associated-with.motivation.goal": {
1316
1281
  "id": "motivation.value.associated-with.motivation.goal",
@@ -1321,7 +1286,8 @@
1321
1286
  "predicate": "associated-with",
1322
1287
  "cardinality": "many-to-many",
1323
1288
  "strength": "medium",
1324
- "required": false
1289
+ "required": false,
1290
+ "description": "The value is the worth of reaching the goal to stakeholders, the reason the goal is pursued."
1325
1291
  },
1326
1292
  "motivation.value.associated-with.motivation.outcome": {
1327
1293
  "id": "motivation.value.associated-with.motivation.outcome",
@@ -1332,29 +1298,44 @@
1332
1298
  "predicate": "associated-with",
1333
1299
  "cardinality": "many-to-many",
1334
1300
  "strength": "medium",
1335
- "required": false
1301
+ "required": false,
1302
+ "description": "The value is the worth of the outcome to stakeholders, such as time saved when a response-time target is met."
1336
1303
  },
1337
- "motivation.value.associated-with.motivation.stakeholder": {
1338
- "id": "motivation.value.associated-with.motivation.stakeholder",
1304
+ "motivation.value.associated-with.motivation.principle": {
1305
+ "id": "motivation.value.associated-with.motivation.principle",
1339
1306
  "source_spec_node_id": "motivation.value",
1340
1307
  "source_layer": "motivation",
1341
- "destination_spec_node_id": "motivation.stakeholder",
1308
+ "destination_spec_node_id": "motivation.principle",
1342
1309
  "destination_layer": "motivation",
1343
1310
  "predicate": "associated-with",
1344
1311
  "cardinality": "many-to-many",
1345
1312
  "strength": "medium",
1346
- "required": false
1313
+ "required": false,
1314
+ "description": "The value is what following the principle is worth, such as lower maintenance cost for 'prefer managed services'."
1347
1315
  },
1348
- "motivation.value.associated-with.motivation.value": {
1349
- "id": "motivation.value.associated-with.motivation.value",
1316
+ "motivation.value.associated-with.motivation.requirement": {
1317
+ "id": "motivation.value.associated-with.motivation.requirement",
1350
1318
  "source_spec_node_id": "motivation.value",
1351
1319
  "source_layer": "motivation",
1352
- "destination_spec_node_id": "motivation.value",
1320
+ "destination_spec_node_id": "motivation.requirement",
1321
+ "destination_layer": "motivation",
1322
+ "predicate": "associated-with",
1323
+ "cardinality": "many-to-many",
1324
+ "strength": "medium",
1325
+ "required": false,
1326
+ "description": "The value is what meeting the requirement is worth to stakeholders."
1327
+ },
1328
+ "motivation.value.associated-with.motivation.stakeholder": {
1329
+ "id": "motivation.value.associated-with.motivation.stakeholder",
1330
+ "source_spec_node_id": "motivation.value",
1331
+ "source_layer": "motivation",
1332
+ "destination_spec_node_id": "motivation.stakeholder",
1353
1333
  "destination_layer": "motivation",
1354
1334
  "predicate": "associated-with",
1355
1335
  "cardinality": "many-to-many",
1356
1336
  "strength": "medium",
1357
- "required": false
1337
+ "required": false,
1338
+ "description": "The stakeholder is the party for whom the value is a worth or benefit. Every value should be associated with at least one stakeholder."
1358
1339
  }
1359
1340
  }
1360
1341
  }