@documentation-robotics/cli 0.1.13 → 0.3.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 (351) hide show
  1. package/README.md +74 -2
  2. package/dist/analysis/relationship-classifier.js +2 -9
  3. package/dist/analysis/relationship-classifier.js.map +2 -2
  4. package/dist/analyzers/call-graph-utils.js +2 -2
  5. package/dist/analyzers/call-graph-utils.js.map +2 -2
  6. package/dist/analyzers/cards/build.js +171 -0
  7. package/dist/analyzers/cards/build.js.map +7 -0
  8. package/dist/analyzers/cards/classify.js +42 -0
  9. package/dist/analyzers/cards/classify.js.map +7 -0
  10. package/dist/analyzers/cards/edge-index.js +44 -0
  11. package/dist/analyzers/cards/edge-index.js.map +7 -0
  12. package/dist/analyzers/cards/facts.js +46 -0
  13. package/dist/analyzers/cards/facts.js.map +7 -0
  14. package/dist/analyzers/cards/graph.js +42 -0
  15. package/dist/analyzers/cards/graph.js.map +7 -0
  16. package/dist/analyzers/cards/index.js +8 -0
  17. package/dist/analyzers/cards/index.js.map +7 -0
  18. package/dist/analyzers/cards/tier0.js +18 -0
  19. package/dist/analyzers/cards/tier0.js.map +7 -0
  20. package/dist/analyzers/cards/types.js +1 -0
  21. package/dist/analyzers/cards/types.js.map +7 -0
  22. package/dist/analyzers/cbm-analyzer.js +195 -171
  23. package/dist/analyzers/cbm-analyzer.js.map +2 -2
  24. package/dist/analyzers/cbm-responses.js +336 -0
  25. package/dist/analyzers/cbm-responses.js.map +7 -0
  26. package/dist/analyzers/edge-relationships.js +45 -0
  27. package/dist/analyzers/edge-relationships.js.map +7 -0
  28. package/dist/analyzers/mapping-loader.js +9 -0
  29. package/dist/analyzers/mapping-loader.js.map +2 -2
  30. package/dist/analyzers/tier0-rules.js +153 -0
  31. package/dist/analyzers/tier0-rules.js.map +7 -0
  32. package/dist/analyzers/types.js.map +1 -1
  33. package/dist/analyzers/verify-engine.js +22 -19
  34. package/dist/analyzers/verify-engine.js.map +2 -2
  35. package/dist/audit/relationships/ai/prompts.js +10 -10
  36. package/dist/audit/relationships/ai/prompts.js.map +2 -2
  37. package/dist/audit/relationships/analysis/layer-templates.js +52 -52
  38. package/dist/audit/relationships/analysis/layer-templates.js.map +1 -1
  39. package/dist/cli.js +112 -28
  40. package/dist/cli.js.map +3 -3
  41. package/dist/coding-agents/agents/claude-code.js +3 -1
  42. package/dist/coding-agents/agents/claude-code.js.map +2 -2
  43. package/dist/coding-agents/claude-code-client.js +2 -1
  44. package/dist/coding-agents/claude-code-client.js.map +2 -2
  45. package/dist/coding-agents/copilot-client.js +17 -12
  46. package/dist/coding-agents/copilot-client.js.map +2 -2
  47. package/dist/coding-agents/default-permissions.js +152 -0
  48. package/dist/coding-agents/default-permissions.js.map +7 -0
  49. package/dist/coding-agents/drbot-mcp.js +167 -0
  50. package/dist/coding-agents/drbot-mcp.js.map +7 -0
  51. package/dist/commands/add.js +12 -7
  52. package/dist/commands/add.js.map +2 -2
  53. package/dist/commands/analyzer.js +134 -23
  54. package/dist/commands/analyzer.js.map +2 -2
  55. package/dist/commands/audit.js +6 -6
  56. package/dist/commands/audit.js.map +2 -2
  57. package/dist/commands/changeset-verify.js +55 -0
  58. package/dist/commands/changeset-verify.js.map +7 -0
  59. package/dist/commands/changeset.js +261 -147
  60. package/dist/commands/changeset.js.map +2 -2
  61. package/dist/commands/delete.js +52 -19
  62. package/dist/commands/delete.js.map +3 -3
  63. package/dist/commands/element.js +3 -2
  64. package/dist/commands/element.js.map +2 -2
  65. package/dist/commands/farm.js +773 -0
  66. package/dist/commands/farm.js.map +7 -0
  67. package/dist/commands/init.js +11 -1
  68. package/dist/commands/init.js.map +2 -2
  69. package/dist/commands/mcp.js +122 -0
  70. package/dist/commands/mcp.js.map +7 -0
  71. package/dist/commands/relationship.js +251 -47
  72. package/dist/commands/relationship.js.map +2 -2
  73. package/dist/commands/reports.js +1 -1
  74. package/dist/commands/reports.js.map +2 -2
  75. package/dist/commands/update.js +56 -24
  76. package/dist/commands/update.js.map +2 -2
  77. package/dist/commands/upgrade.js +99 -11
  78. package/dist/commands/upgrade.js.map +3 -3
  79. package/dist/commands/validate.js +41 -3
  80. package/dist/commands/validate.js.map +2 -2
  81. package/dist/commands/version.js +2 -2
  82. package/dist/commands/version.js.map +2 -2
  83. package/dist/commands/visualize.js +4 -3
  84. package/dist/commands/visualize.js.map +2 -2
  85. package/dist/config.js +83 -0
  86. package/dist/config.js.map +7 -0
  87. package/dist/core/annotation-store.js +138 -0
  88. package/dist/core/annotation-store.js.map +7 -0
  89. package/dist/core/catalog-migration.js +33 -0
  90. package/dist/core/catalog-migration.js.map +7 -0
  91. package/dist/core/changeset-analysis.js +421 -0
  92. package/dist/core/changeset-analysis.js.map +7 -0
  93. package/dist/core/changeset-base-index.js +153 -0
  94. package/dist/core/changeset-base-index.js.map +7 -0
  95. package/dist/core/changeset-brief-delta.js +102 -0
  96. package/dist/core/changeset-brief-delta.js.map +7 -0
  97. package/dist/core/changeset-graph.js +281 -0
  98. package/dist/core/changeset-graph.js.map +7 -0
  99. package/dist/core/changeset-only-guard.js +32 -0
  100. package/dist/core/changeset-only-guard.js.map +7 -0
  101. package/dist/core/changeset-summary.js +68 -0
  102. package/dist/core/changeset-summary.js.map +7 -0
  103. package/dist/core/changeset-validator.js +66 -20
  104. package/dist/core/changeset-validator.js.map +2 -2
  105. package/dist/core/changeset-verify.js +518 -0
  106. package/dist/core/changeset-verify.js.map +7 -0
  107. package/dist/core/changeset.js +56 -9
  108. package/dist/core/changeset.js.map +2 -2
  109. package/dist/core/element-type-migration.js +145 -0
  110. package/dist/core/element-type-migration.js.map +7 -0
  111. package/dist/core/farm-manifest.js +140 -0
  112. package/dist/core/farm-manifest.js.map +7 -0
  113. package/dist/core/farm-sync-engine.js +346 -0
  114. package/dist/core/farm-sync-engine.js.map +7 -0
  115. package/dist/core/farm-sync-state.js +167 -0
  116. package/dist/core/farm-sync-state.js.map +7 -0
  117. package/dist/core/manifest.js +6 -3
  118. package/dist/core/manifest.js.map +2 -2
  119. package/dist/core/migration-registry.js +84 -1
  120. package/dist/core/migration-registry.js.map +2 -2
  121. package/dist/core/model-upgrade.js +102 -0
  122. package/dist/core/model-upgrade.js.map +7 -0
  123. package/dist/core/model.js +257 -44
  124. package/dist/core/model.js.map +3 -3
  125. package/dist/core/mutation-handler.js +71 -6
  126. package/dist/core/mutation-handler.js.map +2 -2
  127. package/dist/core/relationship-migration-table.js +6639 -0
  128. package/dist/core/relationship-migration-table.js.map +7 -0
  129. package/dist/core/relationship-migration.js +272 -0
  130. package/dist/core/relationship-migration.js.map +7 -0
  131. package/dist/core/relationship-prune.js +49 -0
  132. package/dist/core/relationship-prune.js.map +7 -0
  133. package/dist/core/relationship-staging.js +68 -0
  134. package/dist/core/relationship-staging.js.map +7 -0
  135. package/dist/core/relationships.js +26 -4
  136. package/dist/core/relationships.js.map +2 -2
  137. package/dist/core/report-data-model.js +7 -13
  138. package/dist/core/report-data-model.js.map +2 -2
  139. package/dist/core/staged-changeset-storage.js +64 -17
  140. package/dist/core/staged-changeset-storage.js.map +2 -2
  141. package/dist/core/staged-source-reference.js +28 -0
  142. package/dist/core/staged-source-reference.js.map +7 -0
  143. package/dist/core/staging-area.js +83 -18
  144. package/dist/core/staging-area.js.map +2 -2
  145. package/dist/core/virtual-projection.js +14 -5
  146. package/dist/core/virtual-projection.js.map +2 -2
  147. package/dist/export/archimate-exporter.js +1 -0
  148. package/dist/export/archimate-exporter.js.map +2 -2
  149. package/dist/generated/compiled-validators.js +2 -2
  150. package/dist/generated/compiled-validators.js.map +2 -2
  151. package/dist/generated/layer-registry.js +16 -16
  152. package/dist/generated/layer-registry.js.map +2 -2
  153. package/dist/generated/node-types.js +186 -168
  154. package/dist/generated/node-types.js.map +2 -2
  155. package/dist/generated/relationship-index.js +2209 -7727
  156. package/dist/generated/relationship-index.js.map +2 -2
  157. package/dist/integrations/claude_code/agents/dr-architect.md +16 -3
  158. package/dist/integrations/claude_code/agents/dr-extractor.md +1 -1
  159. package/dist/integrations/claude_code/commands/dr-analyzer.md +565 -0
  160. package/dist/integrations/claude_code/commands/dr-map.md +13 -0
  161. package/dist/integrations/claude_code/commands/dr-plan.md +40 -0
  162. package/dist/integrations/claude_code/commands/dr-relate.md +106 -96
  163. package/dist/integrations/claude_code/commands/dr-verify.md +45 -2
  164. package/dist/integrations/claude_code/docs/END_TO_END_WALKTHROUGH.md +14 -0
  165. package/dist/integrations/claude_code/docs/MCP_SERVER.md +79 -0
  166. package/dist/integrations/claude_code/docs/QUICK_START.md +37 -8
  167. package/dist/integrations/claude_code/docs/README.md +52 -1
  168. package/dist/integrations/claude_code/skills/dr_01_motivation_layer/SKILL.md +93 -72
  169. package/dist/integrations/claude_code/skills/dr_02_business_layer/SKILL.md +163 -126
  170. package/dist/integrations/claude_code/skills/dr_03_product_layer/SKILL.md +161 -126
  171. package/dist/integrations/claude_code/skills/dr_04_security_layer/SKILL.md +153 -133
  172. package/dist/integrations/claude_code/skills/dr_05_application_layer/SKILL.md +129 -100
  173. package/dist/integrations/claude_code/skills/dr_06_technology_layer/SKILL.md +111 -94
  174. package/dist/integrations/claude_code/skills/dr_07_api_layer/SKILL.md +143 -157
  175. package/dist/integrations/claude_code/skills/dr_08_data_model_layer/SKILL.md +117 -33
  176. package/dist/integrations/claude_code/skills/dr_09_dataset_layer/SKILL.md +74 -25
  177. package/dist/integrations/claude_code/skills/dr_10_ux_layer/SKILL.md +88 -12
  178. package/dist/integrations/claude_code/skills/dr_11_navigation_layer/SKILL.md +83 -24
  179. package/dist/integrations/claude_code/skills/dr_12_apm_layer/SKILL.md +57 -12
  180. package/dist/integrations/claude_code/skills/dr_13_testing_layer/SKILL.md +92 -15
  181. package/dist/integrations/claude_code/skills/dr_change_planning/SKILL.md +119 -0
  182. package/dist/integrations/claude_code/skills/dr_changeset_reviewer/SKILL.md +3 -0
  183. package/dist/integrations/claude_code/skills/dr_engineering_guide/SKILL.md +1 -1
  184. package/dist/integrations/github_copilot/agents/dr-architect.md +1 -1
  185. package/dist/integrations/github_copilot/skills/dr_01_motivation_layer/SKILL.md +182 -102
  186. package/dist/integrations/github_copilot/skills/dr_02_business_layer/SKILL.md +266 -148
  187. package/dist/integrations/github_copilot/skills/dr_03_product_layer/SKILL.md +547 -86
  188. package/dist/integrations/github_copilot/skills/dr_04_security_layer/SKILL.md +164 -169
  189. package/dist/integrations/github_copilot/skills/dr_05_application_layer/SKILL.md +420 -150
  190. package/dist/integrations/github_copilot/skills/dr_06_technology_layer/SKILL.md +331 -138
  191. package/dist/integrations/github_copilot/skills/dr_07_api_layer/SKILL.md +265 -201
  192. package/dist/integrations/github_copilot/skills/dr_08_data_model_layer/SKILL.md +181 -58
  193. package/dist/integrations/github_copilot/skills/dr_09_dataset_layer/SKILL.md +209 -57
  194. package/dist/integrations/github_copilot/skills/dr_10_ux_layer/SKILL.md +277 -112
  195. package/dist/integrations/github_copilot/skills/dr_11_navigation_layer/SKILL.md +219 -70
  196. package/dist/integrations/github_copilot/skills/dr_12_apm_layer/SKILL.md +189 -105
  197. package/dist/integrations/github_copilot/skills/dr_13_testing_layer/SKILL.md +222 -102
  198. package/dist/integrations/github_copilot/skills/dr_change_planning/SKILL.md +119 -0
  199. package/dist/integrations/github_copilot/skills/dr_changeset_reviewer/SKILL.md +3 -0
  200. package/dist/integrations/hash-utils.js.map +2 -2
  201. package/dist/mcp/api-key-manager.js +111 -0
  202. package/dist/mcp/api-key-manager.js.map +7 -0
  203. package/dist/mcp/changeset-only.js +34 -0
  204. package/dist/mcp/changeset-only.js.map +7 -0
  205. package/dist/mcp/http-transport.js +176 -0
  206. package/dist/mcp/http-transport.js.map +7 -0
  207. package/dist/mcp/resource-registry.js +97 -0
  208. package/dist/mcp/resource-registry.js.map +7 -0
  209. package/dist/mcp/tool-registry.js +60 -0
  210. package/dist/mcp/tool-registry.js.map +7 -0
  211. package/dist/mcp/tools/annotation-create.js +39 -0
  212. package/dist/mcp/tools/annotation-create.js.map +7 -0
  213. package/dist/mcp/tools/annotation-delete.js +29 -0
  214. package/dist/mcp/tools/annotation-delete.js.map +7 -0
  215. package/dist/mcp/tools/annotation-get.js +29 -0
  216. package/dist/mcp/tools/annotation-get.js.map +7 -0
  217. package/dist/mcp/tools/annotation-list.js +24 -0
  218. package/dist/mcp/tools/annotation-list.js.map +7 -0
  219. package/dist/mcp/tools/annotation-reply.js +34 -0
  220. package/dist/mcp/tools/annotation-reply.js.map +7 -0
  221. package/dist/mcp/tools/annotation-shared.js +10 -0
  222. package/dist/mcp/tools/annotation-shared.js.map +7 -0
  223. package/dist/mcp/tools/annotation-update.js +39 -0
  224. package/dist/mcp/tools/annotation-update.js.map +7 -0
  225. package/dist/mcp/tools/changeset-analysis-tools.js +78 -0
  226. package/dist/mcp/tools/changeset-analysis-tools.js.map +7 -0
  227. package/dist/mcp/tools/changeset-editing.js +184 -0
  228. package/dist/mcp/tools/changeset-editing.js.map +7 -0
  229. package/dist/mcp/tools/changeset-lifecycle.js +83 -0
  230. package/dist/mcp/tools/changeset-lifecycle.js.map +7 -0
  231. package/dist/mcp/tools/changeset-list.js +33 -0
  232. package/dist/mcp/tools/changeset-list.js.map +7 -0
  233. package/dist/mcp/tools/changeset-shared.js +31 -0
  234. package/dist/mcp/tools/changeset-shared.js.map +7 -0
  235. package/dist/mcp/tools/changeset-show.js +55 -0
  236. package/dist/mcp/tools/changeset-show.js.map +7 -0
  237. package/dist/mcp/tools/changeset-verify.js +43 -0
  238. package/dist/mcp/tools/changeset-verify.js.map +7 -0
  239. package/dist/mcp/tools/chat-launch.js +50 -0
  240. package/dist/mcp/tools/chat-launch.js.map +7 -0
  241. package/dist/mcp/tools/chat-status.js +26 -0
  242. package/dist/mcp/tools/chat-status.js.map +7 -0
  243. package/dist/mcp/tools/index.js +65 -0
  244. package/dist/mcp/tools/index.js.map +7 -0
  245. package/dist/mcp/tools/model-add.js +107 -0
  246. package/dist/mcp/tools/model-add.js.map +7 -0
  247. package/dist/mcp/tools/model-delete.js +99 -0
  248. package/dist/mcp/tools/model-delete.js.map +7 -0
  249. package/dist/mcp/tools/model-export.js +72 -0
  250. package/dist/mcp/tools/model-export.js.map +7 -0
  251. package/dist/mcp/tools/model-info.js +51 -0
  252. package/dist/mcp/tools/model-info.js.map +7 -0
  253. package/dist/mcp/tools/model-list.js +53 -0
  254. package/dist/mcp/tools/model-list.js.map +7 -0
  255. package/dist/mcp/tools/model-reload.js +34 -0
  256. package/dist/mcp/tools/model-reload.js.map +7 -0
  257. package/dist/mcp/tools/model-search.js +102 -0
  258. package/dist/mcp/tools/model-search.js.map +7 -0
  259. package/dist/mcp/tools/model-show.js +68 -0
  260. package/dist/mcp/tools/model-show.js.map +7 -0
  261. package/dist/mcp/tools/model-stats.js +22 -0
  262. package/dist/mcp/tools/model-stats.js.map +7 -0
  263. package/dist/mcp/tools/model-trace.js +118 -0
  264. package/dist/mcp/tools/model-trace.js.map +7 -0
  265. package/dist/mcp/tools/model-update.js +121 -0
  266. package/dist/mcp/tools/model-update.js.map +7 -0
  267. package/dist/mcp/tools/model-validate.js +78 -0
  268. package/dist/mcp/tools/model-validate.js.map +7 -0
  269. package/dist/mcp/tools/relationship-tools.js +98 -0
  270. package/dist/mcp/tools/relationship-tools.js.map +7 -0
  271. package/dist/mcp/tools/shared.js +126 -0
  272. package/dist/mcp/tools/shared.js.map +7 -0
  273. package/dist/mcp/tools/spec-type.js +90 -0
  274. package/dist/mcp/tools/spec-type.js.map +7 -0
  275. package/dist/reports/model-layer-report-generator.js +5 -3
  276. package/dist/reports/model-layer-report-generator.js.map +2 -2
  277. package/dist/reports/model-readme-generator.js +116 -0
  278. package/dist/reports/model-readme-generator.js.map +7 -0
  279. package/dist/reports/model-report-data.js +37 -1
  280. package/dist/reports/model-report-data.js.map +2 -2
  281. package/dist/reports/model-report-orchestrator.js +29 -6
  282. package/dist/reports/model-report-orchestrator.js.map +2 -2
  283. package/dist/reports/model-report-utils.js +9 -0
  284. package/dist/reports/model-report-utils.js.map +7 -0
  285. package/dist/schemas/bundled/analyzers/cbm.json +1186 -68
  286. package/dist/schemas/bundled/analyzers/manifest.json +2 -2
  287. package/dist/schemas/bundled/api.json +1029 -1658
  288. package/dist/schemas/bundled/apm.json +499 -734
  289. package/dist/schemas/bundled/application.json +745 -370
  290. package/dist/schemas/bundled/base.json +3 -220
  291. package/dist/schemas/bundled/business.json +452 -366
  292. package/dist/schemas/bundled/data-model.json +403 -383
  293. package/dist/schemas/bundled/data-store.json +334 -558
  294. package/dist/schemas/bundled/manifest.json +18 -18
  295. package/dist/schemas/bundled/motivation.json +349 -368
  296. package/dist/schemas/bundled/navigation.json +415 -731
  297. package/dist/schemas/bundled/product.json +325 -159
  298. package/dist/schemas/bundled/security.json +864 -1232
  299. package/dist/schemas/bundled/technology.json +574 -703
  300. package/dist/schemas/bundled/testing.json +718 -1643
  301. package/dist/schemas/bundled/ux.json +739 -1352
  302. package/dist/server/schemas.js +8 -0
  303. package/dist/server/schemas.js.map +2 -2
  304. package/dist/server/server.js +234 -31
  305. package/dist/server/server.js.map +2 -2
  306. package/dist/server-entry.js +2 -1
  307. package/dist/server-entry.js.map +2 -2
  308. package/dist/telemetry/config.js +2 -40
  309. package/dist/telemetry/config.js.map +2 -2
  310. package/dist/telemetry/index.js +1 -1
  311. package/dist/types/index.js.map +2 -2
  312. package/dist/utils/ansi-suppressor.js +23 -0
  313. package/dist/utils/ansi-suppressor.js.map +7 -0
  314. package/dist/utils/attribute-patch.js +41 -0
  315. package/dist/utils/attribute-patch.js.map +7 -0
  316. package/dist/utils/color-utils.js +34 -0
  317. package/dist/utils/color-utils.js.map +7 -0
  318. package/dist/utils/element-reference-shape.js +15 -1
  319. package/dist/utils/element-reference-shape.js.map +3 -3
  320. package/dist/utils/error-hints.js +29 -0
  321. package/dist/utils/error-hints.js.map +7 -0
  322. package/dist/utils/errors.js +75 -10
  323. package/dist/utils/errors.js.map +2 -2
  324. package/dist/utils/globals.js +17 -1
  325. package/dist/utils/globals.js.map +2 -2
  326. package/dist/utils/project-paths.js +50 -3
  327. package/dist/utils/project-paths.js.map +2 -2
  328. package/dist/utils/reference-path-parser.js +49 -0
  329. package/dist/utils/reference-path-parser.js.map +7 -0
  330. package/dist/utils/source-reference.js +17 -10
  331. package/dist/utils/source-reference.js.map +2 -2
  332. package/dist/utils/spec-version.js +10 -2
  333. package/dist/utils/spec-version.js.map +2 -2
  334. package/dist/validators/composed-reference-validator.js +240 -0
  335. package/dist/validators/composed-reference-validator.js.map +7 -0
  336. package/dist/validators/reference-validator.js +57 -13
  337. package/dist/validators/reference-validator.js.map +3 -3
  338. package/dist/validators/relationship-schema-validator.js +33 -5
  339. package/dist/validators/relationship-schema-validator.js.map +3 -3
  340. package/dist/validators/schema-validator.js +27 -9
  341. package/dist/validators/schema-validator.js.map +2 -2
  342. package/dist/validators/types.js.map +1 -1
  343. package/dist/viewer/README.md +6 -6
  344. package/dist/viewer/assets/main-CxzcuU_o.js +84 -0
  345. package/dist/viewer/assets/main-j-7ULYpm.css +1 -0
  346. package/dist/viewer/index.html +2 -2
  347. package/dist/viewer/manifest.json +10 -10
  348. package/dist/viewer/version.json +1 -1
  349. package/package.json +7 -3
  350. package/dist/viewer/assets/main-B7AOQXXX.js +0 -81
  351. package/dist/viewer/assets/main-vdrFrG7q.css +0 -1
@@ -1,10 +1,10 @@
1
1
  {
2
- "specVersion": "0.9.0",
2
+ "specVersion": "0.11.0",
3
3
  "layer": {
4
4
  "id": "application",
5
5
  "number": 5,
6
6
  "name": "Application Layer",
7
- "description": "Layer 5: Application Layer",
7
+ "description": "Models the application architecture: application components (deployable modules, classes and services), the application functions and processes that describe their internal behaviour, the application services and interfaces through which that behaviour is exposed, application events and interactions, collaborations between components, and the data objects they process (ArchiMate 3.2 application layer). This is the default home for ordinary application code structure; more specific layers apply only when a symbol is itself an API contract, a data schema, a persistence object, a UI element, telemetry, security logic or a test asset. Modelling rules: components and collaborations are assigned to the functions, processes and interactions they perform (assigned-to), and a collaboration aggregates its components and nested collaborations. A component provides the interfaces its own code declares and is assigned to an interface it only handles; an interface is assigned to the services it offers. Functions, processes and interactions realize application services; a component may realize one directly, as a shortcut through the behaviour assigned to it. Services serve the components, functions, processes and interactions that use them. Functions, processes, interactions, events and services access data objects, and so do components, unlike in the business layer, because a component is code that holds and passes data; interfaces and collaborations do not. Functions, components and events also access the data-model object schemas and schema definitions they read and write, such as entity classes, directly rather than through a data object. Components, functions and services likewise access the data-store collections and views they read and write. Events trigger processes, interactions and functions (unlike a business function, an application function can be an event handler), and behaviour raises events. A hand-off between behaviours is flows-to; depends-on means one element needs another to work, and is never used where assigned-to, accesses, serves or triggers says it. Across layers, application processes and functions realize the business processes and functions they automate, and application services realize business services and product features and capabilities and, with the behaviour that realizes them, carry the link to motivation (realize goals, satisfy requirements and constraints, deliver value).",
8
8
  "inspired_by": {
9
9
  "standard": "ArchiMate 3.2",
10
10
  "version": "3.2",
@@ -26,7 +26,7 @@
26
26
  "applicationcollaboration": {
27
27
  "$schema": "http://json-schema.org/draft-07/schema#",
28
28
  "title": "ApplicationCollaboration",
29
- "description": "Aggregate of application components working together",
29
+ "description": "An active structure element that names a grouping of two or more application components (or nested collaborations) which jointly perform collective behaviour. It is a logical or configured grouping of independently deployable parts, not a deployable unit or behaviour in its own right. Use ApplicationComponent instead when the symbol is a single modular, deployable unit, even if it internally composes sub-modules or calls other services. Use ApplicationInteraction instead when the symbol describes the joint behaviour itself, such as a message exchange, saga step sequence or protocol between components, rather than the group of participants. Use ApplicationProcess instead when the symbol is an ordered sequence of steps that achieves a result, even if those steps span several components. Use ApplicationService instead when the symbol is the externally exposed functionality the group offers rather than the group of participating components.",
30
30
  "allOf": [
31
31
  {
32
32
  "$ref": "urn:dr:spec:base:spec-node"
@@ -46,7 +46,8 @@
46
46
  "type": "object",
47
47
  "properties": {
48
48
  "documentation": {
49
- "type": "string"
49
+ "type": "string",
50
+ "description": "A free-text description of the collaboration that names its participating components and the joint purpose they serve. Set it whenever the element name alone does not make membership or purpose clear."
50
51
  },
51
52
  "properties": {
52
53
  "type": "object",
@@ -56,12 +57,24 @@
56
57
  "additionalProperties": false
57
58
  }
58
59
  },
60
+ "x-dr-standard": "ArchiMate 3.2 §9.2.2 Application Collaboration",
61
+ "x-dr-evidence": [
62
+ "a saga or choreography definition (e.g. Temporal/Camunda workflow config, event-flow manifest) that enumerates several named participating services under one collective name",
63
+ "a docker-compose file, Helm umbrella chart or Kubernetes namespace that groups multiple separately built services as one named subsystem delivering a shared capability",
64
+ "an architecture document, ADR or C4 diagram boundary that names a set of cooperating services (e.g. 'checkout subsystem: cart, pricing, payment') as a unit"
65
+ ],
66
+ "x-dr-distinguish": {
67
+ "application.applicationcomponent": "the symbol is a single modular, deployable unit, even if it internally composes sub-modules or calls other services",
68
+ "application.applicationinteraction": "the symbol describes the joint behaviour itself, such as a message exchange, saga step sequence or protocol between components, rather than the group of participants",
69
+ "application.applicationprocess": "the symbol is an ordered sequence of steps that achieves a result, even if those steps span several components",
70
+ "application.applicationservice": "the symbol is the externally exposed functionality the group offers rather than the group of participating components"
71
+ },
59
72
  "$id": "urn:dr:spec:node:application.applicationcollaboration"
60
73
  },
61
74
  "applicationcomponent": {
62
75
  "$schema": "http://json-schema.org/draft-07/schema#",
63
76
  "title": "ApplicationComponent",
64
- "description": "Modular, deployable, and replaceable part of a system",
77
+ "description": "An active structural application element that encapsulates a cohesive set of application behaviour and data behind its interfaces and can be built, deployed, or replaced as a unit, such as a service, module, package, or dependency-injected class with its own responsibility. It is the thing that performs behaviour, not the behaviour itself. Use ApplicationFunction instead when the symbol is a unit of behaviour, such as a method, function, or handler body, that a component performs, rather than the structural unit that owns that behaviour. Use ApplicationInterface instead when the symbol is only the access point through which a component's services are reached, such as a controller endpoint set, client stub, or exported port, rather than the implementing unit. Use ApplicationCollaboration instead when the symbol represents a grouping of several components that work together, such as a system-of-services or a composite deployment, rather than a single replaceable unit. Use DataObject instead when the symbol is a passive data structure, such as a DTO, record, or entity without behaviour of its own, that components read or write.",
65
78
  "allOf": [
66
79
  {
67
80
  "$ref": "urn:dr:spec:base:spec-node"
@@ -81,7 +94,8 @@
81
94
  "type": "object",
82
95
  "properties": {
83
96
  "documentation": {
84
- "type": "string"
97
+ "type": "string",
98
+ "description": "Free-text narrative describing the component's responsibility, boundaries, and notable dependencies. Set it whenever the component's name alone does not convey what it owns or why it exists."
85
99
  },
86
100
  "type": {
87
101
  "type": "string",
@@ -97,12 +111,24 @@
97
111
  "additionalProperties": false
98
112
  }
99
113
  },
114
+ "x-dr-standard": "ArchiMate 3.2 §9.2.1 Application Component",
115
+ "x-dr-evidence": [
116
+ "a module, package, or service directory with its own build manifest or deployment descriptor (package.json, pom.xml, go.mod, Dockerfile, Kubernetes Deployment)",
117
+ "a class annotated or registered as a managed component in a DI container (@Component, @Service, @Injectable, Module providers) whose instances are injected into other classes",
118
+ "an entry in docker-compose, Helm charts, or an architecture/service catalogue (e.g. Backstage catalog-info.yaml) naming the unit as a separately deployable service or library"
119
+ ],
120
+ "x-dr-distinguish": {
121
+ "application.applicationfunction": "the symbol is a unit of behaviour, such as a method, function, or handler body, that a component performs, rather than the structural unit that owns that behaviour",
122
+ "application.applicationinterface": "the symbol is only the access point through which a component's services are reached, such as a controller endpoint set, client stub, or exported port, rather than the implementing unit",
123
+ "application.applicationcollaboration": "the symbol represents a grouping of several components that work together, such as a system-of-services or a composite deployment, rather than a single replaceable unit",
124
+ "application.dataobject": "the symbol is a passive data structure, such as a DTO, record, or entity without behaviour of its own, that components read or write"
125
+ },
100
126
  "$id": "urn:dr:spec:node:application.applicationcomponent"
101
127
  },
102
128
  "applicationevent": {
103
129
  "$schema": "http://json-schema.org/draft-07/schema#",
104
130
  "title": "ApplicationEvent",
105
- "description": "A state change in an application element that triggers reactive application behavior.",
131
+ "description": "An application behavior element representing a named, instantaneous occurrence of a state change that an application component emits or receives, and that triggers or is consumed by other application behavior. It has no duration and performs no work itself; reacting is done by processes, functions or interactions. Use DataObject instead when the symbol is a data structure that components read, store or transform, and it is never published, emitted or subscribed to as a notification of something that happened. Use ApplicationProcess instead when the symbol is the handler, listener body or workflow that runs in response to the event, or that produces it, rather than the occurrence itself. Use ApplicationService instead when the symbol is an exposed capability that consumers invoke or subscribe to, such as an event stream offered as a service, rather than one specific kind of occurrence. Use ApplicationInteraction instead when the symbol describes the joint publish-subscribe or messaging behavior between two or more components rather than a single event type exchanged within it.",
106
132
  "allOf": [
107
133
  {
108
134
  "$ref": "urn:dr:spec:base:spec-node"
@@ -122,7 +148,8 @@
122
148
  "type": "object",
123
149
  "properties": {
124
150
  "documentation": {
125
- "type": "string"
151
+ "type": "string",
152
+ "description": "Free-text description of the event: what state change it signals, which component emits it, its typical consumers and any delivery guarantees. Set it whenever the event name alone does not make these clear."
126
153
  },
127
154
  "eventType": {
128
155
  "type": "string",
@@ -138,12 +165,24 @@
138
165
  "additionalProperties": false
139
166
  }
140
167
  },
168
+ "x-dr-standard": "ArchiMate 3.2 §9.3.4 Application Event",
169
+ "x-dr-evidence": [
170
+ "A class or record named in the past tense (e.g. OrderPlaced, UserRegisteredEvent) that extends a framework event base type such as Spring ApplicationEvent or a DomainEvent marker, and is passed to a publisher (eventPublisher.publish, mediator.Publish, bus.emit).",
171
+ "A string or constant event or topic name used in both an emit or publish call and a subscription (emitter.on('invoice.paid'), @EventListener, @KafkaListener(topics=...), RabbitMQ routing key).",
172
+ "A message entry in an AsyncAPI document, event catalog or CloudEvents type registry that declares the event's name and payload and lists its producers and consumers."
173
+ ],
174
+ "x-dr-distinguish": {
175
+ "application.dataobject": "the symbol is a data structure that components read, store or transform, and it is never published, emitted or subscribed to as a notification of something that happened.",
176
+ "application.applicationprocess": "the symbol is the handler, listener body or workflow that runs in response to the event, or that produces it, rather than the occurrence itself.",
177
+ "application.applicationservice": "the symbol is an exposed capability that consumers invoke or subscribe to, such as an event stream offered as a service, rather than one specific kind of occurrence.",
178
+ "application.applicationinteraction": "the symbol describes the joint publish-subscribe or messaging behavior between two or more components rather than a single event type exchanged within it."
179
+ },
141
180
  "$id": "urn:dr:spec:node:application.applicationevent"
142
181
  },
143
182
  "applicationfunction": {
144
183
  "$schema": "http://json-schema.org/draft-07/schema#",
145
184
  "title": "ApplicationFunction",
146
- "description": "Automated behavior performed by an application component for internal purposes, not directly exposed as a service to external consumers.",
185
+ "description": "A unit of automated behavior performed by a single application component, grouped by the kind of work or capability it covers rather than by execution order or trigger, and invoked from inside the system rather than offered as a contract to external consumers. It may be an event handler that an ApplicationEvent triggers, such as a message listener or subscriber callback. Use ApplicationProcess instead when the behavior is an ordered sequence of steps leading to a defined operational result, such as a workflow, saga, pipeline or multi-step job, rather than a capability grouping with no inherent order. Use ApplicationService instead when the behavior is the externally visible, consumer-facing offering, such as a public service-layer method or endpoint-backed capability. The function is the internal behavior that realizes it. Use ApplicationInteraction instead when the behavior can only be performed jointly by two or more components, such as a request-reply exchange or a publish-subscribe handshake, rather than by one component alone. Use ApplicationComponent instead when the symbol is the deployable or replaceable structural unit, such as a module, package or service class, that owns behavior, rather than the behavior itself.",
147
186
  "allOf": [
148
187
  {
149
188
  "$ref": "urn:dr:spec:base:spec-node"
@@ -163,7 +202,8 @@
163
202
  "type": "object",
164
203
  "properties": {
165
204
  "documentation": {
166
- "type": "string"
205
+ "type": "string",
206
+ "description": "Free-text description of what the function computes or manages, its inputs and outputs, and the owning component; set it whenever the name alone does not make the behavior's scope clear."
167
207
  },
168
208
  "properties": {
169
209
  "type": "object",
@@ -173,12 +213,24 @@
173
213
  "additionalProperties": false
174
214
  }
175
215
  },
216
+ "x-dr-standard": "ArchiMate 3.2 §9.3.1 Application Function",
217
+ "x-dr-evidence": [
218
+ "A class or module of internal, unexported or package-private methods grouped around one concern (e.g. PricingCalculator.computeDiscount, TaxRules.apply) whose callers are other classes in the same codebase rather than route handlers or external clients.",
219
+ "A domain or utility function, such as validation, scoring, matching or transformation logic, that is reused by several workflows or service methods and is not registered on any HTTP router, message listener or public API surface.",
220
+ "A stored procedure, rule-engine rule or helper invoked through an internal call graph, documented as 'computes', 'validates' or 'derives' something, with no ordering of steps and no direct external trigger."
221
+ ],
222
+ "x-dr-distinguish": {
223
+ "application.applicationprocess": "the behavior is an ordered sequence of steps leading to a defined operational result, such as a workflow, saga, pipeline or multi-step job, rather than a capability grouping with no inherent order.",
224
+ "application.applicationservice": "the behavior is the externally visible, consumer-facing offering, such as a public service-layer method or endpoint-backed capability. The function is the internal behavior that realizes it.",
225
+ "application.applicationinteraction": "the behavior can only be performed jointly by two or more components, such as a request-reply exchange or a publish-subscribe handshake, rather than by one component alone.",
226
+ "application.applicationcomponent": "the symbol is the deployable or replaceable structural unit, such as a module, package or service class, that owns behavior, rather than the behavior itself."
227
+ },
176
228
  "$id": "urn:dr:spec:node:application.applicationfunction"
177
229
  },
178
230
  "applicationinteraction": {
179
231
  "$schema": "http://json-schema.org/draft-07/schema#",
180
232
  "title": "ApplicationInteraction",
181
- "description": "Collective application behavior performed by two or more application components working in collaboration, representing their joint behavioral contribution.",
233
+ "description": "A unit of application behaviour performed jointly by two or more application components acting as a collaboration, which no single participant completes alone, such as a saga, a multi-service choreography or a handshake protocol spanning both sides of an exchange. Use ApplicationProcess instead when the ordered sequence of steps is executed by a single application component, even if it calls other components as dependencies. Use ApplicationCollaboration instead when the symbol represents the structural grouping of cooperating components rather than the behaviour they jointly perform. Use ApplicationService instead when the symbol is the externally exposed, consumer-facing behaviour offered to callers rather than the internal joint behaviour that realizes it. Use ApplicationEvent instead when the symbol is the message, notification or state change exchanged between participants rather than the cooperative behaviour that produces and handles it.",
182
234
  "allOf": [
183
235
  {
184
236
  "$ref": "urn:dr:spec:base:spec-node"
@@ -198,7 +250,8 @@
198
250
  "type": "object",
199
251
  "properties": {
200
252
  "documentation": {
201
- "type": "string"
253
+ "type": "string",
254
+ "description": "Free-text description of the joint behaviour, naming the participating components, the exchange it accomplishes and its trigger. Set it whenever the participants or flow are not evident from the element name."
202
255
  },
203
256
  "pattern": {
204
257
  "type": "string",
@@ -215,12 +268,24 @@
215
268
  "additionalProperties": false
216
269
  }
217
270
  },
271
+ "x-dr-standard": "ArchiMate 3.2 §9.3.2 Application Interaction",
272
+ "x-dr-evidence": [
273
+ "a saga or choreography definition (e.g. Temporal/Camunda workflow, Axon saga, Step Functions state machine) whose steps invoke and compensate operations in several distinct services",
274
+ "a matched producer and consumer pair across separate deployable modules bound to the same topic, queue or RPC contract and documented as one flow (e.g. an AsyncAPI channel or sequence diagram naming multiple services)",
275
+ "a coordinator implementing a multi-party protocol such as two-phase commit, distributed lock negotiation or a client-server handshake where both sides' logic is required to complete the exchange"
276
+ ],
277
+ "x-dr-distinguish": {
278
+ "application.applicationprocess": "the ordered sequence of steps is executed by a single application component, even if it calls other components as dependencies.",
279
+ "application.applicationcollaboration": "the symbol represents the structural grouping of cooperating components rather than the behaviour they jointly perform.",
280
+ "application.applicationservice": "the symbol is the externally exposed, consumer-facing behaviour offered to callers rather than the internal joint behaviour that realizes it.",
281
+ "application.applicationevent": "the symbol is the message, notification or state change exchanged between participants rather than the cooperative behaviour that produces and handles it."
282
+ },
218
283
  "$id": "urn:dr:spec:node:application.applicationinteraction"
219
284
  },
220
285
  "applicationinterface": {
221
286
  "$schema": "http://json-schema.org/draft-07/schema#",
222
287
  "title": "ApplicationInterface",
223
- "description": "Point of access where application service is available",
288
+ "description": "An active-structure access point owned by an application component or collaboration, such as a mounted controller, gRPC server binding, GraphQL endpoint or message-channel listener, through which that component's application services are reachable by users or other components over a specific application-level protocol. It is the channel itself, not the behaviour offered through it and not the formal contract document describing it. Use ApplicationService instead when the element describes the externally visible behaviour or functionality offered, such as 'order placement', independent of the endpoint, protocol or channel through which it is reached. Use ApplicationComponent instead when the symbol is the deployable or replaceable module, service or package as a whole, rather than one of the access points it provides. Use ApplicationInteraction instead when the symbol represents joint behaviour carried out by two or more components exchanging messages, rather than the single access point one component offers. Use ApplicationFunction instead when the symbol is internal handler or business logic invoked behind the endpoint, rather than the endpoint binding or adapter itself.",
224
289
  "allOf": [
225
290
  {
226
291
  "$ref": "urn:dr:spec:base:spec-node"
@@ -240,7 +305,8 @@
240
305
  "type": "object",
241
306
  "properties": {
242
307
  "documentation": {
243
- "type": "string"
308
+ "type": "string",
309
+ "description": "Free-text description of the access point: which component provides it, its base path, address or channel name, the services reachable through it, and any notable constraints. Set it whenever the name and protocol alone do not identify the endpoint."
244
310
  },
245
311
  "protocol": {
246
312
  "type": "string",
@@ -265,12 +331,24 @@
265
331
  "additionalProperties": false
266
332
  }
267
333
  },
334
+ "x-dr-standard": "ArchiMate 3.2 §9.2.3 Application Interface",
335
+ "x-dr-evidence": [
336
+ "A controller or router class that groups route handlers under a base path and is mounted on a web server, such as a Spring @RestController with @RequestMapping(\"/orders\"), an Express Router passed to app.use('/orders', ...), or a FastAPI APIRouter included in the app.",
337
+ "A gRPC servicer or GraphQL schema/resolver set registered on a server at startup, such as add_OrderServiceServicer_to_server(...) or an Apollo server exposing /graphql.",
338
+ "A message or socket entry point bound to a named channel in code or config, such as a @RabbitListener(queues=\"orders\") consumer, an AMQP queue binding in application.yml, or a WebSocket endpoint handler (@ServerEndpoint, socket.io namespace)."
339
+ ],
340
+ "x-dr-distinguish": {
341
+ "application.applicationservice": "the element describes the externally visible behaviour or functionality offered, such as 'order placement', independent of the endpoint, protocol or channel through which it is reached.",
342
+ "application.applicationcomponent": "the symbol is the deployable or replaceable module, service or package as a whole, rather than one of the access points it provides.",
343
+ "application.applicationinteraction": "the symbol represents joint behaviour carried out by two or more components exchanging messages, rather than the single access point one component offers.",
344
+ "application.applicationfunction": "the symbol is internal handler or business logic invoked behind the endpoint, rather than the endpoint binding or adapter itself."
345
+ },
268
346
  "$id": "urn:dr:spec:node:application.applicationinterface"
269
347
  },
270
348
  "applicationprocess": {
271
349
  "$schema": "http://json-schema.org/draft-07/schema#",
272
350
  "title": "ApplicationProcess",
273
- "description": "An ordered sequence of application behaviors performed by an application component to achieve a specific operational result.",
351
+ "description": "An internal behaviour element of an application component consisting of a fixed, ordered series of steps (calls, transformations, state transitions) that runs from a start trigger to a defined end result. What sets it apart is that the sequence and the outcome are explicit, as in a workflow, saga, pipeline or multi-step orchestration method, rather than a grouping of related capabilities. Use ApplicationFunction instead when the behaviour is a cohesive grouping of capability, such as a module of related operations or a single-purpose routine, with no meaningful step order or defined end-to-end outcome. Use ApplicationService instead when the symbol is the externally consumable entry point or contract (a service method or endpoint offered to consumers) rather than the internal step sequence that fulfils it. Use ApplicationInteraction instead when the ordered behaviour is jointly performed by two or more components, for example a choreographed exchange, and cannot be attributed to a single component. Use ApplicationEvent instead when the symbol represents the occurrence or state change that starts or ends the sequence (an event class or message type), not the steps themselves.",
274
352
  "allOf": [
275
353
  {
276
354
  "$ref": "urn:dr:spec:base:spec-node"
@@ -290,7 +368,8 @@
290
368
  "type": "object",
291
369
  "properties": {
292
370
  "documentation": {
293
- "type": "string"
371
+ "type": "string",
372
+ "description": "Free-text description of the process: its triggering event, its ordered main steps, and the result it produces. Set it whenever the step sequence is not evident from the element name, preferably drawn from code comments or workflow docs."
294
373
  },
295
374
  "properties": {
296
375
  "type": "object",
@@ -300,12 +379,24 @@
300
379
  "additionalProperties": false
301
380
  }
302
381
  },
382
+ "x-dr-standard": "ArchiMate 3.2 §9.3 Application Process (application internal behaviour element)",
383
+ "x-dr-evidence": [
384
+ "A workflow, saga or state-machine definition (e.g. Temporal/Camunda/Step Functions workflow, Spring State Machine, a Saga class) declaring ordered steps or states with transitions",
385
+ "An orchestration method that calls several functions or services in a fixed sequence with intermediate results passed between steps and a final result or status returned (e.g. processOrder(): validate → reserve → charge → ship)",
386
+ "A pipeline or job definition (ETL job, batch Step/Job configuration, chain of handlers/middleware registered in order) that is started by a trigger such as a scheduled job, a message consumer or an event handler"
387
+ ],
388
+ "x-dr-distinguish": {
389
+ "application.applicationfunction": "the behaviour is a cohesive grouping of capability, such as a module of related operations or a single-purpose routine, with no meaningful step order or defined end-to-end outcome",
390
+ "application.applicationservice": "the symbol is the externally consumable entry point or contract (a service method or endpoint offered to consumers) rather than the internal step sequence that fulfils it",
391
+ "application.applicationinteraction": "the ordered behaviour is jointly performed by two or more components, for example a choreographed exchange, and cannot be attributed to a single component",
392
+ "application.applicationevent": "the symbol represents the occurrence or state change that starts or ends the sequence (an event class or message type), not the steps themselves"
393
+ },
303
394
  "$id": "urn:dr:spec:node:application.applicationprocess"
304
395
  },
305
396
  "applicationservice": {
306
397
  "$schema": "http://json-schema.org/draft-07/schema#",
307
398
  "title": "ApplicationService",
308
- "description": "Service that exposes application functionality",
399
+ "description": "An externally visible unit of application behavior that a component, function, process or interaction makes available to consumers (users, business processes, or other components) as a named set of operations, defined by what it offers rather than how it is implemented or accessed. Use ApplicationFunction instead when the behavior is internal to a component, such as a private helper, mapper or validation routine, and is not offered as a named capability to callers outside that component. Use ApplicationInterface instead when the symbol is the access point or binding through which a service is reached, such as an HTTP controller, gRPC endpoint, WebSocket handler or message listener, carrying a specific protocol. Use ApplicationComponent instead when the symbol is the deployable or replaceable structural unit (module, package, microservice, class as a unit of deployment) that performs or realizes behavior, rather than the behavior it exposes. Use ApplicationProcess instead when the symbol is an ordered sequence of steps, such as a saga, workflow or orchestrator method, that achieves a result rather than an offered capability.",
309
400
  "allOf": [
310
401
  {
311
402
  "$ref": "urn:dr:spec:base:spec-node"
@@ -325,7 +416,8 @@
325
416
  "type": "object",
326
417
  "properties": {
327
418
  "documentation": {
328
- "type": "string"
419
+ "type": "string",
420
+ "description": "Free-text description of what the service offers to its consumers, including its main operations and intended callers; set it whenever the service name alone does not convey its scope."
329
421
  },
330
422
  "serviceType": {
331
423
  "type": "string",
@@ -341,12 +433,24 @@
341
433
  "additionalProperties": false
342
434
  }
343
435
  },
436
+ "x-dr-standard": "ArchiMate 3.2 §9.3 Application Service",
437
+ "x-dr-evidence": [
438
+ "A service interface or abstract contract, such as IOrderService or a gRPC 'service' block in a .proto file, whose operations are injected into or called from controllers, handlers or other modules",
439
+ "A class annotated @Service, @Injectable or registered in a DI container whose public methods are invoked across module or component boundaries rather than only within its own package",
440
+ "A queue consumer, scheduled batch job or event subscriber documented or configured to fulfil requests from other systems under a named capability, for example a 'payment-processing' worker bound in messaging or cron configuration"
441
+ ],
442
+ "x-dr-distinguish": {
443
+ "application.applicationfunction": "the behavior is internal to a component, such as a private helper, mapper or validation routine, and is not offered as a named capability to callers outside that component",
444
+ "application.applicationinterface": "the symbol is the access point or binding through which a service is reached, such as an HTTP controller, gRPC endpoint, WebSocket handler or message listener, carrying a specific protocol",
445
+ "application.applicationcomponent": "the symbol is the deployable or replaceable structural unit (module, package, microservice, class as a unit of deployment) that performs or realizes behavior, rather than the behavior it exposes",
446
+ "application.applicationprocess": "the symbol is an ordered sequence of steps, such as a saga, workflow or orchestrator method, that achieves a result rather than an offered capability"
447
+ },
344
448
  "$id": "urn:dr:spec:node:application.applicationservice"
345
449
  },
346
450
  "dataobject": {
347
451
  "$schema": "http://json-schema.org/draft-07/schema#",
348
452
  "title": "DataObject",
349
- "description": "A passive application element representing data structured for automated processing by application components. Unlike behavioral elements, it is accessed, manipulated, or stored by active elements — not an actor itself. For canonical data schema definitions shared across layers, use the Data Model layer instead.",
453
+ "description": "A passive application element: a code-level data structure (class, record, struct, type alias or message payload) whose purpose is to hold state that application components, functions and services create, read, transform or pass along, and which performs no application behavior beyond trivial accessors, constructors or self-validation. Use ApplicationComponent instead when the class encapsulates substantive behavior or dependencies (injected collaborators, business logic, I/O) and acts as a modular, replaceable unit rather than as a carrier of state. Use ApplicationEvent instead when the structure represents the occurrence of a state change that is published or dispatched to trigger reactive behavior, rather than data that is merely accessed; an event class's separate payload type remains a data object. Use ApplicationInterface instead when the type defines an access point (method contract, endpoint binding, client stub) through which a service is invoked, rather than the data exchanged through it. Use data-model ObjectSchema instead when the structure is a persisted entity or ORM model, or its shape is published as a schema (a JSON Schema, an OpenAPI component, a validation model that serializes to one); the object schema may then realize the data object.",
350
454
  "allOf": [
351
455
  {
352
456
  "$ref": "urn:dr:spec:base:spec-node"
@@ -366,7 +470,8 @@
366
470
  "type": "object",
367
471
  "properties": {
368
472
  "documentation": {
369
- "type": "string"
473
+ "type": "string",
474
+ "description": "Free-text description of what information the data object holds, its main fields and which components produce or consume it; set it whenever the symbol name alone does not convey the data's meaning."
370
475
  },
371
476
  "properties": {
372
477
  "type": "object",
@@ -376,10 +481,36 @@
376
481
  "additionalProperties": false
377
482
  }
378
483
  },
484
+ "x-dr-standard": "ArchiMate 3.2 §9.4.1 Data Object",
485
+ "x-dr-evidence": [
486
+ "A class, record, struct or dataclass consisting mainly of fields with getters/setters or immutable properties (e.g. Python @dataclass, Java record, Lombok @Data, C# record, TypeScript interface or type alias) and no injected dependencies.",
487
+ "The type appears as a parameter or return type in signatures of service, handler or function methods, e.g. names ending in Dto, Command, Request, Result, Model or ValueObject.",
488
+ "Instances are constructed, mapped (e.g. via a mapper or serializer) and mutated by other classes, while the type itself carries no ORM table mapping, OpenAPI schema annotation or UI binding that would place it in a more specific layer."
489
+ ],
490
+ "x-dr-distinguish": {
491
+ "application.applicationcomponent": "the class encapsulates substantive behavior or dependencies (injected collaborators, business logic, I/O) and acts as a modular, replaceable unit rather than as a carrier of state.",
492
+ "application.applicationevent": "the structure represents the occurrence of a state change that is published or dispatched to trigger reactive behavior, rather than data that is merely accessed; an event class's separate payload type remains a data object.",
493
+ "application.applicationinterface": "the type defines an access point (method contract, endpoint binding, client stub) through which a service is invoked, rather than the data exchanged through it."
494
+ },
379
495
  "$id": "urn:dr:spec:node:application.dataobject"
380
496
  }
381
497
  },
382
498
  "relationshipSchemas": {
499
+ "application.applicationcollaboration.aggregates.application.applicationcollaboration": {
500
+ "id": "application.applicationcollaboration.aggregates.application.applicationcollaboration",
501
+ "source_spec_node_id": "application.applicationcollaboration",
502
+ "source_layer": "application",
503
+ "destination_spec_node_id": "application.applicationcollaboration",
504
+ "destination_layer": "application",
505
+ "predicate": "aggregates",
506
+ "cardinality": "many-to-many",
507
+ "strength": "medium",
508
+ "required": false,
509
+ "description": "The outer collaboration counts the inner collaboration as one of its participating members, such as a checkout subsystem that includes a payment collaboration, while the inner collaboration keeps its own identity and may also belong to other collaborations.",
510
+ "evidence": [
511
+ "A docker-compose file, Helm umbrella chart or architecture document lists one named group of cooperating services as a member of a larger named subsystem, for example a payment collaboration inside a checkout subsystem."
512
+ ]
513
+ },
383
514
  "application.applicationcollaboration.aggregates.application.applicationcomponent": {
384
515
  "id": "application.applicationcollaboration.aggregates.application.applicationcomponent",
385
516
  "source_spec_node_id": "application.applicationcollaboration",
@@ -389,95 +520,119 @@
389
520
  "predicate": "aggregates",
390
521
  "cardinality": "many-to-many",
391
522
  "strength": "medium",
392
- "required": false
523
+ "required": false,
524
+ "description": "The collaboration counts the component as one of its participating members, while the component stays independently deployable and may also belong to other collaborations.",
525
+ "evidence": [
526
+ "A docker-compose file, Helm umbrella chart, or architecture document lists the component as a member service of the named collaboration, for example among the declared participants of a saga."
527
+ ]
393
528
  },
394
- "application.applicationcollaboration.delivers-value.application.applicationinteraction": {
395
- "id": "application.applicationcollaboration.delivers-value.application.applicationinteraction",
529
+ "application.applicationcollaboration.assigned-to.application.applicationinteraction": {
530
+ "id": "application.applicationcollaboration.assigned-to.application.applicationinteraction",
396
531
  "source_spec_node_id": "application.applicationcollaboration",
397
532
  "source_layer": "application",
398
533
  "destination_spec_node_id": "application.applicationinteraction",
399
534
  "destination_layer": "application",
400
- "predicate": "delivers-value",
535
+ "predicate": "assigned-to",
401
536
  "cardinality": "many-to-many",
402
537
  "strength": "medium",
403
- "required": false
538
+ "required": false,
539
+ "description": "The collaboration is the joint actor whose member components together carry out the interaction; no single member performs it alone.",
540
+ "evidence": [
541
+ "A saga or choreography definition, such as a Temporal workflow, Step Functions state machine, or event-flow document, has every step executed by member components of the collaboration."
542
+ ]
404
543
  },
405
- "application.applicationcollaboration.delivers-value.application.applicationservice": {
406
- "id": "application.applicationcollaboration.delivers-value.application.applicationservice",
544
+ "application.applicationcollaboration.assigned-to.application.applicationprocess": {
545
+ "id": "application.applicationcollaboration.assigned-to.application.applicationprocess",
407
546
  "source_spec_node_id": "application.applicationcollaboration",
408
547
  "source_layer": "application",
409
- "destination_spec_node_id": "application.applicationservice",
548
+ "destination_spec_node_id": "application.applicationprocess",
410
549
  "destination_layer": "application",
411
- "predicate": "delivers-value",
550
+ "predicate": "assigned-to",
412
551
  "cardinality": "many-to-many",
413
552
  "strength": "medium",
414
- "required": false
553
+ "required": false,
554
+ "description": "The collaboration is the set of components that together perform the process; the process's steps call across the cooperating members and no single one carries it end to end."
415
555
  },
416
- "application.applicationcollaboration.depends-on.application.applicationcomponent": {
417
- "id": "application.applicationcollaboration.depends-on.application.applicationcomponent",
556
+ "application.applicationcollaboration.provides.application.applicationinterface": {
557
+ "id": "application.applicationcollaboration.provides.application.applicationinterface",
418
558
  "source_spec_node_id": "application.applicationcollaboration",
419
559
  "source_layer": "application",
420
- "destination_spec_node_id": "application.applicationcomponent",
560
+ "destination_spec_node_id": "application.applicationinterface",
421
561
  "destination_layer": "application",
422
- "predicate": "depends-on",
562
+ "predicate": "provides",
423
563
  "cardinality": "many-to-many",
424
564
  "strength": "medium",
425
- "required": false
565
+ "required": false,
566
+ "description": "The collaboration offers a single access point, such as a gateway endpoint or shared topic, through which consumers reach the services its members deliver jointly.",
567
+ "evidence": [
568
+ "An API gateway, ingress, or BFF controller configuration mounts a route that fans out to the member components and is documented as the collaboration's entry point."
569
+ ]
426
570
  },
427
- "application.applicationcollaboration.depends-on.application.applicationinteraction": {
428
- "id": "application.applicationcollaboration.depends-on.application.applicationinteraction",
571
+ "application.applicationcollaboration.realizes.application.applicationservice": {
572
+ "id": "application.applicationcollaboration.realizes.application.applicationservice",
429
573
  "source_spec_node_id": "application.applicationcollaboration",
430
574
  "source_layer": "application",
431
- "destination_spec_node_id": "application.applicationinteraction",
575
+ "destination_spec_node_id": "application.applicationservice",
432
576
  "destination_layer": "application",
433
- "predicate": "depends-on",
577
+ "predicate": "realizes",
434
578
  "cardinality": "many-to-many",
435
579
  "strength": "medium",
436
- "required": false
580
+ "required": false,
581
+ "description": "The collaboration's combined behaviour is what makes the externally visible service available, so the service's operations exist only because the members work together.",
582
+ "evidence": [
583
+ "An API gateway route or service-catalog entry for the service is fulfilled by orchestrating calls across several member components of the collaboration."
584
+ ]
437
585
  },
438
- "application.applicationcollaboration.depends-on.application.applicationinterface": {
439
- "id": "application.applicationcollaboration.depends-on.application.applicationinterface",
440
- "source_spec_node_id": "application.applicationcollaboration",
586
+ "application.applicationcomponent.accesses.data-store.collection": {
587
+ "id": "application.applicationcomponent.accesses.data-store.collection",
588
+ "source_spec_node_id": "application.applicationcomponent",
441
589
  "source_layer": "application",
442
- "destination_spec_node_id": "application.applicationinterface",
443
- "destination_layer": "application",
444
- "predicate": "depends-on",
590
+ "destination_spec_node_id": "data-store.collection",
591
+ "destination_layer": "data-store",
592
+ "predicate": "accesses",
445
593
  "cardinality": "many-to-many",
446
594
  "strength": "medium",
447
- "required": false
595
+ "required": false,
596
+ "description": "The component reads or writes the collection's records, such as a repository or DAO class. Use the object schema's maps-to instead to say which entity the collection stores."
448
597
  },
449
- "application.applicationcollaboration.depends-on.application.dataobject": {
450
- "id": "application.applicationcollaboration.depends-on.application.dataobject",
451
- "source_spec_node_id": "application.applicationcollaboration",
598
+ "application.applicationcomponent.accesses.application.dataobject": {
599
+ "id": "application.applicationcomponent.accesses.application.dataobject",
600
+ "source_spec_node_id": "application.applicationcomponent",
452
601
  "source_layer": "application",
453
602
  "destination_spec_node_id": "application.dataobject",
454
603
  "destination_layer": "application",
455
- "predicate": "depends-on",
604
+ "predicate": "accesses",
456
605
  "cardinality": "many-to-many",
457
606
  "strength": "medium",
458
- "required": false
607
+ "required": false,
608
+ "description": "The component creates, reads, updates or deletes instances of the data structure while performing its behaviour, so the data object is part of the state it handles. Unlike in the business layer, active structure may access data here, because a component is code that holds and passes data; interfaces and collaborations do not.",
609
+ "evidence": [
610
+ "The component's class or module instantiates, deserializes, mutates or returns the data object's type, for example as a repository method parameter or return type."
611
+ ]
459
612
  },
460
- "application.applicationcollaboration.provides.application.applicationinterface": {
461
- "id": "application.applicationcollaboration.provides.application.applicationinterface",
462
- "source_spec_node_id": "application.applicationcollaboration",
613
+ "application.applicationcomponent.accesses.data-model.objectschema": {
614
+ "id": "application.applicationcomponent.accesses.data-model.objectschema",
615
+ "source_spec_node_id": "application.applicationcomponent",
463
616
  "source_layer": "application",
464
- "destination_spec_node_id": "application.applicationinterface",
465
- "destination_layer": "application",
466
- "predicate": "provides",
617
+ "destination_spec_node_id": "data-model.objectschema",
618
+ "destination_layer": "data-model",
619
+ "predicate": "accesses",
467
620
  "cardinality": "many-to-many",
468
621
  "strength": "medium",
469
- "required": false
622
+ "required": false,
623
+ "description": "The component creates, reads, updates or deletes instances of the object schema, such as a repository or service class working with an entity class. Use accesses to an application data object instead when the structure is not part of the data model."
470
624
  },
471
- "application.applicationcomponent.accesses.application.dataobject": {
472
- "id": "application.applicationcomponent.accesses.application.dataobject",
625
+ "application.applicationcomponent.accesses.data-model.schemadefinition": {
626
+ "id": "application.applicationcomponent.accesses.data-model.schemadefinition",
473
627
  "source_spec_node_id": "application.applicationcomponent",
474
628
  "source_layer": "application",
475
- "destination_spec_node_id": "application.dataobject",
476
- "destination_layer": "application",
629
+ "destination_spec_node_id": "data-model.schemadefinition",
630
+ "destination_layer": "data-model",
477
631
  "predicate": "accesses",
478
632
  "cardinality": "many-to-many",
479
633
  "strength": "medium",
480
- "required": false
634
+ "required": false,
635
+ "description": "The component creates, reads or updates data of the named definition, such as a class that validates or produces values of a shared schema type."
481
636
  },
482
637
  "application.applicationcomponent.accesses.security.secureresource": {
483
638
  "id": "application.applicationcomponent.accesses.security.secureresource",
@@ -488,7 +643,11 @@
488
643
  "predicate": "accesses",
489
644
  "cardinality": "many-to-many",
490
645
  "strength": "medium",
491
- "required": false
646
+ "required": false,
647
+ "description": "The component performs operations on the protected resource at runtime, which makes it a subject whose actions on that resource are checked by access control.",
648
+ "evidence": [
649
+ "The component's code calls the resource's protected operations, such as a guarded API path, table or file, or the security configuration lists the component's service identity as a principal on that resource."
650
+ ]
492
651
  },
493
652
  "application.applicationcomponent.assigned-to.application.applicationfunction": {
494
653
  "id": "application.applicationcomponent.assigned-to.application.applicationfunction",
@@ -499,7 +658,11 @@
499
658
  "predicate": "assigned-to",
500
659
  "cardinality": "many-to-many",
501
660
  "strength": "medium",
502
- "required": false
661
+ "required": false,
662
+ "description": "The component is the active structure that performs the function: the function's logic runs inside this component and is attributed to it, not offered as a service of its own.",
663
+ "evidence": [
664
+ "The function's code lives only within the component's package or source tree and is not exported or reused by any other deployable unit."
665
+ ]
503
666
  },
504
667
  "application.applicationcomponent.assigned-to.application.applicationinterface": {
505
668
  "id": "application.applicationcomponent.assigned-to.application.applicationinterface",
@@ -510,51 +673,53 @@
510
673
  "predicate": "assigned-to",
511
674
  "cardinality": "many-to-many",
512
675
  "strength": "medium",
513
- "required": false
676
+ "required": false,
677
+ "description": "The component handles the requests that arrive through an access point it does not itself declare, such as a member component behind a collaboration's gateway route or a shared message channel, so the interface's traffic is carried out by this component. Use provides instead when the component's own codebase declares and exposes the access point.",
678
+ "evidence": [
679
+ "A gateway, ingress or shared-channel configuration owned by a collaboration or another component routes the interface's requests to this component's handlers."
680
+ ]
514
681
  },
515
- "application.applicationcomponent.composes.application.applicationfunction": {
516
- "id": "application.applicationcomponent.composes.application.applicationfunction",
682
+ "application.applicationcomponent.assigned-to.application.applicationprocess": {
683
+ "id": "application.applicationcomponent.assigned-to.application.applicationprocess",
517
684
  "source_spec_node_id": "application.applicationcomponent",
518
685
  "source_layer": "application",
519
- "destination_spec_node_id": "application.applicationfunction",
686
+ "destination_spec_node_id": "application.applicationprocess",
520
687
  "destination_layer": "application",
521
- "predicate": "composes",
522
- "cardinality": "many-to-many",
523
- "strength": "medium",
524
- "required": false
525
- },
526
- "application.applicationcomponent.constrained-by.security.securitypolicy": {
527
- "id": "application.applicationcomponent.constrained-by.security.securitypolicy",
528
- "source_spec_node_id": "application.applicationcomponent",
529
- "source_layer": "application",
530
- "destination_spec_node_id": "security.securitypolicy",
531
- "destination_layer": "security",
532
- "predicate": "constrained-by",
688
+ "predicate": "assigned-to",
533
689
  "cardinality": "many-to-many",
534
690
  "strength": "medium",
535
- "required": false
691
+ "required": false,
692
+ "description": "The component is the active structure that performs the process; the process's ordered steps run inside this component."
536
693
  },
537
- "application.applicationcomponent.implements.security.countermeasure": {
538
- "id": "application.applicationcomponent.implements.security.countermeasure",
694
+ "application.applicationcomponent.composes.application.applicationcomponent": {
695
+ "id": "application.applicationcomponent.composes.application.applicationcomponent",
539
696
  "source_spec_node_id": "application.applicationcomponent",
540
697
  "source_layer": "application",
541
- "destination_spec_node_id": "security.countermeasure",
542
- "destination_layer": "security",
543
- "predicate": "implements",
698
+ "destination_spec_node_id": "application.applicationcomponent",
699
+ "destination_layer": "application",
700
+ "predicate": "composes",
544
701
  "cardinality": "many-to-many",
545
702
  "strength": "medium",
546
- "required": false
703
+ "required": false,
704
+ "description": "An application component is made up of sub-components that exist only as its parts, such as a package or directory-level component and the modules inside it.",
705
+ "evidence": [
706
+ "A directory or package modelled as a component (src/analyzers/, a Java package, a Python package with __init__.py) containing modules or subpackages modelled as components; CBM CONTAINS_FOLDER and CONTAINS_FILE."
707
+ ]
547
708
  },
548
- "application.applicationcomponent.mitigates.security.threat": {
549
- "id": "application.applicationcomponent.mitigates.security.threat",
709
+ "application.applicationcomponent.constrained-by.security.securitypolicy": {
710
+ "id": "application.applicationcomponent.constrained-by.security.securitypolicy",
550
711
  "source_spec_node_id": "application.applicationcomponent",
551
712
  "source_layer": "application",
552
- "destination_spec_node_id": "security.threat",
713
+ "destination_spec_node_id": "security.securitypolicy",
553
714
  "destination_layer": "security",
554
- "predicate": "mitigates",
715
+ "predicate": "constrained-by",
555
716
  "cardinality": "many-to-many",
556
717
  "strength": "medium",
557
- "required": false
718
+ "required": false,
719
+ "description": "The component's permitted operations and data access are limited by the rules of the security policy, so its behaviour must stay within what the policy allows.",
720
+ "evidence": [
721
+ "The policy's target selectors name the component or its endpoints, or the component's middleware or policy-engine configuration loads and evaluates that policy before acting."
722
+ ]
558
723
  },
559
724
  "application.applicationcomponent.provides.application.applicationinterface": {
560
725
  "id": "application.applicationcomponent.provides.application.applicationinterface",
@@ -565,7 +730,11 @@
565
730
  "predicate": "provides",
566
731
  "cardinality": "many-to-many",
567
732
  "strength": "medium",
568
- "required": false
733
+ "required": false,
734
+ "description": "The component offers the access point to users or other components, making its services reachable through that controller, endpoint or channel.",
735
+ "evidence": [
736
+ "The component's codebase declares and exposes the interface, for example by mounting the route, publishing the gRPC service definition or subscribing the listener at startup."
737
+ ]
569
738
  },
570
739
  "application.applicationcomponent.realizes.application.applicationservice": {
571
740
  "id": "application.applicationcomponent.realizes.application.applicationservice",
@@ -576,95 +745,110 @@
576
745
  "predicate": "realizes",
577
746
  "cardinality": "many-to-many",
578
747
  "strength": "medium",
579
- "required": false
748
+ "required": false,
749
+ "description": "The component's internal behaviour is what concretely delivers the operations that the service promises to its consumers. This is a shortcut through the functions and processes assigned to the component, for when those are not modelled separately; links from the service to other layers go from the service, not the component.",
750
+ "evidence": [
751
+ "The component's class implements the service's interface or contract, such as an OpenAPI or protobuf service definition, with method bodies backing each operation."
752
+ ]
580
753
  },
581
- "application.applicationcomponent.realizes.business.businessservice": {
582
- "id": "application.applicationcomponent.realizes.business.businessservice",
754
+ "application.applicationcomponent.realizes.security.countermeasure": {
755
+ "id": "application.applicationcomponent.realizes.security.countermeasure",
583
756
  "source_spec_node_id": "application.applicationcomponent",
584
757
  "source_layer": "application",
585
- "destination_spec_node_id": "business.businessservice",
586
- "destination_layer": "business",
587
- "predicate": "realizes",
588
- "cardinality": "many-to-many",
589
- "strength": "medium",
590
- "required": false
591
- },
592
- "application.applicationcomponent.realizes.motivation.goal": {
593
- "id": "application.applicationcomponent.realizes.motivation.goal",
594
- "source_spec_node_id": "application.applicationcomponent",
595
- "source_layer": "application",
596
- "destination_spec_node_id": "motivation.goal",
597
- "destination_layer": "motivation",
758
+ "destination_spec_node_id": "security.countermeasure",
759
+ "destination_layer": "security",
598
760
  "predicate": "realizes",
599
761
  "cardinality": "many-to-many",
600
762
  "strength": "medium",
601
- "required": false
763
+ "required": false,
764
+ "description": "The component contains the working code of the security control, turning the documented countermeasure into executing behaviour.",
765
+ "evidence": [
766
+ "The component's source contains the control logic, such as input sanitization, rate limiting, encryption or token validation, and the countermeasure record points to that module as its implementation."
767
+ ]
602
768
  },
603
- "application.applicationcomponent.realizes.motivation.principle": {
604
- "id": "application.applicationcomponent.realizes.motivation.principle",
769
+ "application.applicationcomponent.specializes.application.applicationcomponent": {
770
+ "id": "application.applicationcomponent.specializes.application.applicationcomponent",
605
771
  "source_spec_node_id": "application.applicationcomponent",
606
772
  "source_layer": "application",
607
- "destination_spec_node_id": "motivation.principle",
608
- "destination_layer": "motivation",
609
- "predicate": "realizes",
773
+ "destination_spec_node_id": "application.applicationcomponent",
774
+ "destination_layer": "application",
775
+ "predicate": "specializes",
610
776
  "cardinality": "many-to-many",
611
777
  "strength": "medium",
612
- "required": false
778
+ "required": false,
779
+ "description": "An application component is a specialised kind of another component: it inherits the general component's structure and behaviour and refines part of it, and can stand wherever the general one is expected.",
780
+ "evidence": [
781
+ "A class extending another class of the same codebase where both are modelled as components (class FileStore extends BaseStore, class Owner(Person) with behaviour), recorded by CBM as an INHERITS edge."
782
+ ]
613
783
  },
614
- "application.applicationcomponent.satisfies.motivation.requirement": {
615
- "id": "application.applicationcomponent.satisfies.motivation.requirement",
784
+ "application.applicationcomponent.uses.application.applicationcomponent": {
785
+ "id": "application.applicationcomponent.uses.application.applicationcomponent",
616
786
  "source_spec_node_id": "application.applicationcomponent",
617
787
  "source_layer": "application",
618
- "destination_spec_node_id": "motivation.requirement",
619
- "destination_layer": "motivation",
620
- "predicate": "satisfies",
788
+ "destination_spec_node_id": "application.applicationcomponent",
789
+ "destination_layer": "application",
790
+ "predicate": "uses",
621
791
  "cardinality": "many-to-many",
622
792
  "strength": "medium",
623
- "required": false
793
+ "required": false,
794
+ "description": "The source component relies on the target component's functionality at runtime, so the target is a dependency the source needs to do its work.",
795
+ "evidence": [
796
+ "The source component injects, imports or calls the target, for example through a dependency-injection binding, package dependency or HTTP/gRPC client configured with the target's address."
797
+ ]
624
798
  },
625
- "application.applicationcomponent.serves.business.businessrole": {
626
- "id": "application.applicationcomponent.serves.business.businessrole",
627
- "source_spec_node_id": "application.applicationcomponent",
799
+ "application.applicationevent.accesses.application.dataobject": {
800
+ "id": "application.applicationevent.accesses.application.dataobject",
801
+ "source_spec_node_id": "application.applicationevent",
628
802
  "source_layer": "application",
629
- "destination_spec_node_id": "business.businessrole",
630
- "destination_layer": "business",
631
- "predicate": "serves",
803
+ "destination_spec_node_id": "application.dataobject",
804
+ "destination_layer": "application",
805
+ "predicate": "accesses",
632
806
  "cardinality": "many-to-many",
633
807
  "strength": "medium",
634
- "required": false
808
+ "required": false,
809
+ "description": "The application event carries or is defined by the data object as its payload, so the event cannot be emitted or interpreted without that data structure's schema.",
810
+ "evidence": [
811
+ "The event class or message schema declares the data object type as its payload field, or the event topic's Avro/JSON schema references the data object's definition."
812
+ ]
635
813
  },
636
- "application.applicationcomponent.uses.application.applicationcomponent": {
637
- "id": "application.applicationcomponent.uses.application.applicationcomponent",
638
- "source_spec_node_id": "application.applicationcomponent",
814
+ "application.applicationevent.accesses.data-model.schemadefinition": {
815
+ "id": "application.applicationevent.accesses.data-model.schemadefinition",
816
+ "source_spec_node_id": "application.applicationevent",
639
817
  "source_layer": "application",
640
- "destination_spec_node_id": "application.applicationcomponent",
641
- "destination_layer": "application",
642
- "predicate": "uses",
818
+ "destination_spec_node_id": "data-model.schemadefinition",
819
+ "destination_layer": "data-model",
820
+ "predicate": "accesses",
643
821
  "cardinality": "many-to-many",
644
822
  "strength": "medium",
645
- "required": false
823
+ "required": false,
824
+ "description": "The event carries data of the named definition as its payload, so publishers write and handlers read values of that type."
646
825
  },
647
- "application.applicationevent.depends-on.application.dataobject": {
648
- "id": "application.applicationevent.depends-on.application.dataobject",
826
+ "application.applicationevent.triggers.application.applicationfunction": {
827
+ "id": "application.applicationevent.triggers.application.applicationfunction",
649
828
  "source_spec_node_id": "application.applicationevent",
650
829
  "source_layer": "application",
651
- "destination_spec_node_id": "application.dataobject",
830
+ "destination_spec_node_id": "application.applicationfunction",
652
831
  "destination_layer": "application",
653
- "predicate": "depends-on",
832
+ "predicate": "triggers",
654
833
  "cardinality": "many-to-many",
655
834
  "strength": "medium",
656
- "required": false
835
+ "required": false,
836
+ "description": "The application function is a handler that runs when the application event arrives, such as a message listener or an event subscriber callback; unlike a business function, an application function can be started by an event."
657
837
  },
658
- "application.applicationevent.triggers.application.applicationcollaboration": {
659
- "id": "application.applicationevent.triggers.application.applicationcollaboration",
838
+ "application.applicationevent.triggers.application.applicationinteraction": {
839
+ "id": "application.applicationevent.triggers.application.applicationinteraction",
660
840
  "source_spec_node_id": "application.applicationevent",
661
841
  "source_layer": "application",
662
- "destination_spec_node_id": "application.applicationcollaboration",
842
+ "destination_spec_node_id": "application.applicationinteraction",
663
843
  "destination_layer": "application",
664
844
  "predicate": "triggers",
665
845
  "cardinality": "many-to-many",
666
846
  "strength": "medium",
667
- "required": false
847
+ "required": false,
848
+ "description": "Occurrence of the application event sets off the interaction, the joint behaviour carried out by a collaboration of components, such as a choreographed saga across several services.",
849
+ "evidence": [
850
+ "Every component in the collaboration has a subscriber or consumer configuration bound to the event's topic or channel that starts their coordinated handling, for example in AsyncAPI specs or message-broker subscription config."
851
+ ]
668
852
  },
669
853
  "application.applicationevent.triggers.application.applicationprocess": {
670
854
  "id": "application.applicationevent.triggers.application.applicationprocess",
@@ -675,7 +859,11 @@
675
859
  "predicate": "triggers",
676
860
  "cardinality": "many-to-many",
677
861
  "strength": "medium",
678
- "required": false
862
+ "required": false,
863
+ "description": "Emission of the application event is the start trigger that launches a run of the application process's ordered sequence of steps.",
864
+ "evidence": [
865
+ "A handler annotated as the listener for the event, such as @EventListener, a Kafka consumer, or a workflow-engine start-event definition, invokes the process's entry point or starts the workflow instance."
866
+ ]
679
867
  },
680
868
  "application.applicationevent.triggers.business.businessprocess": {
681
869
  "id": "application.applicationevent.triggers.business.businessprocess",
@@ -686,7 +874,23 @@
686
874
  "predicate": "triggers",
687
875
  "cardinality": "many-to-many",
688
876
  "strength": "medium",
689
- "required": false
877
+ "required": false,
878
+ "description": "The application event signals a system state change that initiates the business process carried out by people or roles in the organisation, such as a notification that starts a manual review.",
879
+ "evidence": [
880
+ "A BPMN model or operational runbook names the event as the start event of the business process, or an integration creates a task in the BPM or ticketing system when the event fires."
881
+ ]
882
+ },
883
+ "application.applicationfunction.accesses.data-store.collection": {
884
+ "id": "application.applicationfunction.accesses.data-store.collection",
885
+ "source_spec_node_id": "application.applicationfunction",
886
+ "source_layer": "application",
887
+ "destination_spec_node_id": "data-store.collection",
888
+ "destination_layer": "data-store",
889
+ "predicate": "accesses",
890
+ "cardinality": "many-to-many",
891
+ "strength": "medium",
892
+ "required": false,
893
+ "description": "The function reads or writes the collection's records while it runs, such as a repository method running a query. Use an access pattern instead when the query shape itself is modelled."
690
894
  },
691
895
  "application.applicationfunction.accesses.application.dataobject": {
692
896
  "id": "application.applicationfunction.accesses.application.dataobject",
@@ -697,51 +901,62 @@
697
901
  "predicate": "accesses",
698
902
  "cardinality": "many-to-many",
699
903
  "strength": "medium",
700
- "required": false
904
+ "required": false,
905
+ "description": "The application function reads, creates or modifies the state held in the data object while it performs its work, treating the data structure as passive material.",
906
+ "evidence": [
907
+ "The function's implementing methods instantiate, read fields of, or mutate the class, record or struct that defines the data object, for example by taking it as a parameter or returning it."
908
+ ]
701
909
  },
702
- "application.applicationfunction.accesses.security.secureresource": {
703
- "id": "application.applicationfunction.accesses.security.secureresource",
910
+ "application.applicationfunction.accesses.data-model.objectschema": {
911
+ "id": "application.applicationfunction.accesses.data-model.objectschema",
704
912
  "source_spec_node_id": "application.applicationfunction",
705
913
  "source_layer": "application",
706
- "destination_spec_node_id": "security.secureresource",
707
- "destination_layer": "security",
914
+ "destination_spec_node_id": "data-model.objectschema",
915
+ "destination_layer": "data-model",
708
916
  "predicate": "accesses",
709
917
  "cardinality": "many-to-many",
710
918
  "strength": "medium",
711
- "required": false
919
+ "required": false,
920
+ "description": "The function reads or writes instances of the object schema while it runs, such as a handler that loads and saves an entity. Use accesses to an application data object instead when the structure is not part of the data model."
712
921
  },
713
- "application.applicationfunction.delivers-value.application.applicationprocess": {
714
- "id": "application.applicationfunction.delivers-value.application.applicationprocess",
922
+ "application.applicationfunction.accesses.data-model.schemadefinition": {
923
+ "id": "application.applicationfunction.accesses.data-model.schemadefinition",
715
924
  "source_spec_node_id": "application.applicationfunction",
716
925
  "source_layer": "application",
717
- "destination_spec_node_id": "application.applicationprocess",
718
- "destination_layer": "application",
719
- "predicate": "delivers-value",
926
+ "destination_spec_node_id": "data-model.schemadefinition",
927
+ "destination_layer": "data-model",
928
+ "predicate": "accesses",
720
929
  "cardinality": "many-to-many",
721
930
  "strength": "medium",
722
- "required": false
931
+ "required": false,
932
+ "description": "The function reads or writes data of the named definition while it runs, such as a method that builds or validates values of a shared schema type."
723
933
  },
724
- "application.applicationfunction.delivers-value.application.applicationservice": {
725
- "id": "application.applicationfunction.delivers-value.application.applicationservice",
934
+ "application.applicationfunction.accesses.security.secureresource": {
935
+ "id": "application.applicationfunction.accesses.security.secureresource",
726
936
  "source_spec_node_id": "application.applicationfunction",
727
937
  "source_layer": "application",
728
- "destination_spec_node_id": "application.applicationservice",
729
- "destination_layer": "application",
730
- "predicate": "delivers-value",
938
+ "destination_spec_node_id": "security.secureresource",
939
+ "destination_layer": "security",
940
+ "predicate": "accesses",
731
941
  "cardinality": "many-to-many",
732
942
  "strength": "medium",
733
- "required": false
943
+ "required": false,
944
+ "description": "The application function performs operations on the protected resource and is therefore a subject whose actions fall under that resource's access-control rules.",
945
+ "evidence": [
946
+ "The function's code invokes an operation on the resource that the security policy names, such as a repository call on a guarded entity, or carries the permission check or annotation that the resource definition declares."
947
+ ]
734
948
  },
735
- "application.applicationfunction.depends-on.application.applicationevent": {
736
- "id": "application.applicationfunction.depends-on.application.applicationevent",
949
+ "application.applicationfunction.accesses.data-store.view": {
950
+ "id": "application.applicationfunction.accesses.data-store.view",
737
951
  "source_spec_node_id": "application.applicationfunction",
738
952
  "source_layer": "application",
739
- "destination_spec_node_id": "application.applicationevent",
740
- "destination_layer": "application",
741
- "predicate": "depends-on",
953
+ "destination_spec_node_id": "data-store.view",
954
+ "destination_layer": "data-store",
955
+ "predicate": "accesses",
742
956
  "cardinality": "many-to-many",
743
957
  "strength": "medium",
744
- "required": false
958
+ "required": false,
959
+ "description": "The function reads the view while it runs, such as a report query against a reporting view."
745
960
  },
746
961
  "application.applicationfunction.depends-on.application.applicationfunction": {
747
962
  "id": "application.applicationfunction.depends-on.application.applicationfunction",
@@ -752,18 +967,11 @@
752
967
  "predicate": "depends-on",
753
968
  "cardinality": "many-to-many",
754
969
  "strength": "medium",
755
- "required": false
756
- },
757
- "application.applicationfunction.depends-on.application.dataobject": {
758
- "id": "application.applicationfunction.depends-on.application.dataobject",
759
- "source_spec_node_id": "application.applicationfunction",
760
- "source_layer": "application",
761
- "destination_spec_node_id": "application.dataobject",
762
- "destination_layer": "application",
763
- "predicate": "depends-on",
764
- "cardinality": "many-to-many",
765
- "strength": "medium",
766
- "required": false
970
+ "required": false,
971
+ "description": "The source application function needs the capability of another internal application function, typically by calling it, in order to complete its own work. Use flows-to instead when the source hands its output on to the target, which continues the processing.",
972
+ "evidence": [
973
+ "The source function's implementation imports and calls the other function's methods, or receives it as an injected collaborator."
974
+ ]
767
975
  },
768
976
  "application.applicationfunction.flows-to.application.applicationfunction": {
769
977
  "id": "application.applicationfunction.flows-to.application.applicationfunction",
@@ -774,7 +982,11 @@
774
982
  "predicate": "flows-to",
775
983
  "cardinality": "many-to-many",
776
984
  "strength": "medium",
777
- "required": false
985
+ "required": false,
986
+ "description": "Data or control produced by the source application function is handed on to the target application function, which continues the processing. Use depends-on instead when the source calls the target and needs its result to finish.",
987
+ "evidence": [
988
+ "The source function's return value or emitted payload is passed directly into the target function, through a call chain, a pipeline wiring or a queue that connects the two."
989
+ ]
778
990
  },
779
991
  "application.applicationfunction.realizes.application.applicationservice": {
780
992
  "id": "application.applicationfunction.realizes.application.applicationservice",
@@ -785,7 +997,11 @@
785
997
  "predicate": "realizes",
786
998
  "cardinality": "many-to-many",
787
999
  "strength": "medium",
788
- "required": false
1000
+ "required": false,
1001
+ "description": "The application function is the internal behavior that concretely implements the operations the application service exposes to its consumers.",
1002
+ "evidence": [
1003
+ "The service interface or API contract is implemented by classes or methods belonging to the function, for example a service implementation class that contains the function's logic."
1004
+ ]
789
1005
  },
790
1006
  "application.applicationfunction.realizes.business.businessfunction": {
791
1007
  "id": "application.applicationfunction.realizes.business.businessfunction",
@@ -796,7 +1012,11 @@
796
1012
  "predicate": "realizes",
797
1013
  "cardinality": "many-to-many",
798
1014
  "strength": "medium",
799
- "required": false
1015
+ "required": false,
1016
+ "description": "The application function automates the competency described by the business function, so that software carries out work the business function groups.",
1017
+ "evidence": [
1018
+ "Architecture or capability-mapping documentation maps the application module to the business function, and the module's logic implements that business area's rules, such as payroll calculation for HR management."
1019
+ ]
800
1020
  },
801
1021
  "application.applicationfunction.satisfies.motivation.requirement": {
802
1022
  "id": "application.applicationfunction.satisfies.motivation.requirement",
@@ -807,62 +1027,56 @@
807
1027
  "predicate": "satisfies",
808
1028
  "cardinality": "many-to-many",
809
1029
  "strength": "medium",
810
- "required": false
1030
+ "required": false,
1031
+ "description": "The application function's behavior meets the stated need, so the requirement is fulfilled by what the function does.",
1032
+ "evidence": [
1033
+ "A requirements-traceability matrix, ticket link or code annotation ties the function's implementation to the requirement ID, and acceptance tests for the requirement exercise the function."
1034
+ ]
811
1035
  },
812
- "application.applicationinteraction.delivers-value.application.applicationservice": {
813
- "id": "application.applicationinteraction.delivers-value.application.applicationservice",
814
- "source_spec_node_id": "application.applicationinteraction",
815
- "source_layer": "application",
816
- "destination_spec_node_id": "application.applicationservice",
817
- "destination_layer": "application",
818
- "predicate": "delivers-value",
819
- "cardinality": "many-to-many",
820
- "strength": "medium",
821
- "required": false
822
- },
823
- "application.applicationinteraction.depends-on.application.applicationcollaboration": {
824
- "id": "application.applicationinteraction.depends-on.application.applicationcollaboration",
825
- "source_spec_node_id": "application.applicationinteraction",
1036
+ "application.applicationfunction.specializes.application.applicationfunction": {
1037
+ "id": "application.applicationfunction.specializes.application.applicationfunction",
1038
+ "source_spec_node_id": "application.applicationfunction",
826
1039
  "source_layer": "application",
827
- "destination_spec_node_id": "application.applicationcollaboration",
1040
+ "destination_spec_node_id": "application.applicationfunction",
828
1041
  "destination_layer": "application",
829
- "predicate": "depends-on",
1042
+ "predicate": "specializes",
830
1043
  "cardinality": "many-to-many",
831
1044
  "strength": "medium",
832
- "required": false
1045
+ "required": false,
1046
+ "description": "An application function refines another function's behaviour for a more specific case: it overrides the general function and is used in its place for that case.",
1047
+ "evidence": [
1048
+ "A method marked @Override, or a subclass method with the same name and signature as its parent's, both modelled as functions; CBM OVERRIDE."
1049
+ ]
833
1050
  },
834
- "application.applicationinteraction.depends-on.application.applicationevent": {
835
- "id": "application.applicationinteraction.depends-on.application.applicationevent",
836
- "source_spec_node_id": "application.applicationinteraction",
1051
+ "application.applicationfunction.triggers.application.applicationevent": {
1052
+ "id": "application.applicationfunction.triggers.application.applicationevent",
1053
+ "source_spec_node_id": "application.applicationfunction",
837
1054
  "source_layer": "application",
838
1055
  "destination_spec_node_id": "application.applicationevent",
839
1056
  "destination_layer": "application",
840
- "predicate": "depends-on",
841
- "cardinality": "many-to-many",
842
- "strength": "medium",
843
- "required": false
844
- },
845
- "application.applicationinteraction.depends-on.application.applicationservice": {
846
- "id": "application.applicationinteraction.depends-on.application.applicationservice",
847
- "source_spec_node_id": "application.applicationinteraction",
848
- "source_layer": "application",
849
- "destination_spec_node_id": "application.applicationservice",
850
- "destination_layer": "application",
851
- "predicate": "depends-on",
1057
+ "predicate": "triggers",
852
1058
  "cardinality": "many-to-many",
853
1059
  "strength": "medium",
854
- "required": false
1060
+ "required": false,
1061
+ "description": "The application function emits the application event when it reaches a state change worth signalling, such as publishing a message or dispatching a domain event, for other behaviour to react to.",
1062
+ "evidence": [
1063
+ "A step or completion handler in the workflow code publishes, emits or dispatches the named event type to an event bus, topic or in-process event dispatcher."
1064
+ ]
855
1065
  },
856
- "application.applicationinteraction.depends-on.application.dataobject": {
857
- "id": "application.applicationinteraction.depends-on.application.dataobject",
1066
+ "application.applicationinteraction.accesses.application.dataobject": {
1067
+ "id": "application.applicationinteraction.accesses.application.dataobject",
858
1068
  "source_spec_node_id": "application.applicationinteraction",
859
1069
  "source_layer": "application",
860
1070
  "destination_spec_node_id": "application.dataobject",
861
1071
  "destination_layer": "application",
862
- "predicate": "depends-on",
1072
+ "predicate": "accesses",
863
1073
  "cardinality": "many-to-many",
864
1074
  "strength": "medium",
865
- "required": false
1075
+ "required": false,
1076
+ "description": "The interaction's participants create, read or update the data object as the state they exchange, such as the message payload or the saga state record passed across the collaboration.",
1077
+ "evidence": [
1078
+ "The saga state class, message schema or payload type is imported and serialized/deserialized by the participants' interaction handlers, or declared in the protocol's schema definitions."
1079
+ ]
866
1080
  },
867
1081
  "application.applicationinteraction.realizes.application.applicationservice": {
868
1082
  "id": "application.applicationinteraction.realizes.application.applicationservice",
@@ -873,29 +1087,41 @@
873
1087
  "predicate": "realizes",
874
1088
  "cardinality": "many-to-many",
875
1089
  "strength": "medium",
876
- "required": false
1090
+ "required": false,
1091
+ "description": "The collaborative behaviour is the concrete mechanism through which the externally visible application service is actually delivered, with the service's operations implemented by the saga or multi-party exchange.",
1092
+ "evidence": [
1093
+ "The service's API endpoint or operation handler starts the saga or choreography and returns its result, or architecture documentation maps the service operation to the interaction as its implementation."
1094
+ ]
877
1095
  },
878
- "application.applicationinterface.delivers-value.application.applicationcollaboration": {
879
- "id": "application.applicationinterface.delivers-value.application.applicationcollaboration",
880
- "source_spec_node_id": "application.applicationinterface",
1096
+ "application.applicationinteraction.triggers.application.applicationevent": {
1097
+ "id": "application.applicationinteraction.triggers.application.applicationevent",
1098
+ "source_spec_node_id": "application.applicationinteraction",
881
1099
  "source_layer": "application",
882
- "destination_spec_node_id": "application.applicationcollaboration",
1100
+ "destination_spec_node_id": "application.applicationevent",
883
1101
  "destination_layer": "application",
884
- "predicate": "delivers-value",
1102
+ "predicate": "triggers",
885
1103
  "cardinality": "many-to-many",
886
1104
  "strength": "medium",
887
- "required": false
1105
+ "required": false,
1106
+ "description": "The interaction emits the application event when the joint behaviour reaches a named state change, such as a saga completing or a handshake failing.",
1107
+ "evidence": [
1108
+ "A step or completion handler in the workflow code publishes, emits or dispatches the named event type to an event bus, topic or in-process event dispatcher."
1109
+ ]
888
1110
  },
889
- "application.applicationinterface.depends-on.application.applicationcomponent": {
890
- "id": "application.applicationinterface.depends-on.application.applicationcomponent",
1111
+ "application.applicationinterface.assigned-to.application.applicationservice": {
1112
+ "id": "application.applicationinterface.assigned-to.application.applicationservice",
891
1113
  "source_spec_node_id": "application.applicationinterface",
892
1114
  "source_layer": "application",
893
- "destination_spec_node_id": "application.applicationcomponent",
1115
+ "destination_spec_node_id": "application.applicationservice",
894
1116
  "destination_layer": "application",
895
- "predicate": "depends-on",
1117
+ "predicate": "assigned-to",
896
1118
  "cardinality": "many-to-many",
897
1119
  "strength": "medium",
898
- "required": false
1120
+ "required": false,
1121
+ "description": "The interface is the protocol-specific channel through which the application service's operations are offered to its consumers.",
1122
+ "evidence": [
1123
+ "The service's operations are bound to routes, RPC methods or topics on this interface in the router, servicer registration or API specification."
1124
+ ]
899
1125
  },
900
1126
  "application.applicationinterface.depends-on.application.applicationfunction": {
901
1127
  "id": "application.applicationinterface.depends-on.application.applicationfunction",
@@ -906,29 +1132,11 @@
906
1132
  "predicate": "depends-on",
907
1133
  "cardinality": "many-to-many",
908
1134
  "strength": "medium",
909
- "required": false
910
- },
911
- "application.applicationinterface.depends-on.application.applicationservice": {
912
- "id": "application.applicationinterface.depends-on.application.applicationservice",
913
- "source_spec_node_id": "application.applicationinterface",
914
- "source_layer": "application",
915
- "destination_spec_node_id": "application.applicationservice",
916
- "destination_layer": "application",
917
- "predicate": "depends-on",
918
- "cardinality": "many-to-many",
919
- "strength": "medium",
920
- "required": false
921
- },
922
- "application.applicationinterface.depends-on.application.dataobject": {
923
- "id": "application.applicationinterface.depends-on.application.dataobject",
924
- "source_spec_node_id": "application.applicationinterface",
925
- "source_layer": "application",
926
- "destination_spec_node_id": "application.dataobject",
927
- "destination_layer": "application",
928
- "predicate": "depends-on",
929
- "cardinality": "many-to-many",
930
- "strength": "medium",
931
- "required": false
1135
+ "required": false,
1136
+ "description": "Requests received on the interface are handled by delegating to an internal function of the component, so the endpoint needs that function to produce its responses.",
1137
+ "evidence": [
1138
+ "The route handler or RPC method body calls the internal function's method or module directly, as shown in the import graph and call sites."
1139
+ ]
932
1140
  },
933
1141
  "application.applicationinterface.exposes.security.secureresource": {
934
1142
  "id": "application.applicationinterface.exposes.security.secureresource",
@@ -939,18 +1147,11 @@
939
1147
  "predicate": "exposes",
940
1148
  "cardinality": "many-to-many",
941
1149
  "strength": "medium",
942
- "required": false
943
- },
944
- "application.applicationinterface.serves.application.applicationservice": {
945
- "id": "application.applicationinterface.serves.application.applicationservice",
946
- "source_spec_node_id": "application.applicationinterface",
947
- "source_layer": "application",
948
- "destination_spec_node_id": "application.applicationservice",
949
- "destination_layer": "application",
950
- "predicate": "serves",
951
- "cardinality": "many-to-many",
952
- "strength": "medium",
953
- "required": false
1150
+ "required": false,
1151
+ "description": "The interface makes the protected resource reachable to callers, so the resource's permitted operations are invoked through this endpoint and its access controls must apply there.",
1152
+ "evidence": [
1153
+ "Routes or RPC methods on the interface map to the resource's operations and carry security annotations, guards or policy configuration naming that resource."
1154
+ ]
954
1155
  },
955
1156
  "application.applicationinterface.serves.business.businessrole": {
956
1157
  "id": "application.applicationinterface.serves.business.businessrole",
@@ -961,40 +1162,26 @@
961
1162
  "predicate": "serves",
962
1163
  "cardinality": "many-to-many",
963
1164
  "strength": "medium",
964
- "required": false
965
- },
966
- "application.applicationprocess.delivers-value.application.applicationservice": {
967
- "id": "application.applicationprocess.delivers-value.application.applicationservice",
968
- "source_spec_node_id": "application.applicationprocess",
969
- "source_layer": "application",
970
- "destination_spec_node_id": "application.applicationservice",
971
- "destination_layer": "application",
972
- "predicate": "delivers-value",
973
- "cardinality": "many-to-many",
974
- "strength": "medium",
975
- "required": false
976
- },
977
- "application.applicationprocess.depends-on.application.applicationcollaboration": {
978
- "id": "application.applicationprocess.depends-on.application.applicationcollaboration",
979
- "source_spec_node_id": "application.applicationprocess",
980
- "source_layer": "application",
981
- "destination_spec_node_id": "application.applicationcollaboration",
982
- "destination_layer": "application",
983
- "predicate": "depends-on",
984
- "cardinality": "many-to-many",
985
- "strength": "medium",
986
- "required": false
1165
+ "required": false,
1166
+ "description": "Holders of the business role use the interface as their point of access to the application's functionality when carrying out their responsibilities.",
1167
+ "evidence": [
1168
+ "The interface's authorization configuration, UI/API documentation or access policy names the role as an intended consumer, e.g. role-restricted routes or a role-specific portal endpoint."
1169
+ ]
987
1170
  },
988
- "application.applicationprocess.depends-on.application.applicationevent": {
989
- "id": "application.applicationprocess.depends-on.application.applicationevent",
1171
+ "application.applicationprocess.accesses.application.dataobject": {
1172
+ "id": "application.applicationprocess.accesses.application.dataobject",
990
1173
  "source_spec_node_id": "application.applicationprocess",
991
1174
  "source_layer": "application",
992
- "destination_spec_node_id": "application.applicationevent",
1175
+ "destination_spec_node_id": "application.dataobject",
993
1176
  "destination_layer": "application",
994
- "predicate": "depends-on",
1177
+ "predicate": "accesses",
995
1178
  "cardinality": "many-to-many",
996
1179
  "strength": "medium",
997
- "required": false
1180
+ "required": false,
1181
+ "description": "The workflow creates, reads, transforms or passes along the data object between steps, so its inputs, intermediate state or result have that structure.",
1182
+ "evidence": [
1183
+ "The process's step signatures, saga state class or pipeline stage types take or return the data object's class, record or message payload type."
1184
+ ]
998
1185
  },
999
1186
  "application.applicationprocess.depends-on.application.applicationfunction": {
1000
1187
  "id": "application.applicationprocess.depends-on.application.applicationfunction",
@@ -1005,40 +1192,41 @@
1005
1192
  "predicate": "depends-on",
1006
1193
  "cardinality": "many-to-many",
1007
1194
  "strength": "medium",
1008
- "required": false
1009
- },
1010
- "application.applicationprocess.depends-on.application.applicationinterface": {
1011
- "id": "application.applicationprocess.depends-on.application.applicationinterface",
1012
- "source_spec_node_id": "application.applicationprocess",
1013
- "source_layer": "application",
1014
- "destination_spec_node_id": "application.applicationinterface",
1015
- "destination_layer": "application",
1016
- "predicate": "depends-on",
1017
- "cardinality": "many-to-many",
1018
- "strength": "medium",
1019
- "required": false
1195
+ "required": false,
1196
+ "description": "One or more ordered steps of the workflow call the internal application function to perform a piece of work, so the process cannot finish without that capability.",
1197
+ "evidence": [
1198
+ "A step method or activity in the pipeline, saga or workflow code calls the function's internal module or class method, visible in the call graph or activity registration."
1199
+ ]
1020
1200
  },
1021
- "application.applicationprocess.depends-on.application.dataobject": {
1022
- "id": "application.applicationprocess.depends-on.application.dataobject",
1201
+ "application.applicationprocess.flows-to.application.applicationprocess": {
1202
+ "id": "application.applicationprocess.flows-to.application.applicationprocess",
1023
1203
  "source_spec_node_id": "application.applicationprocess",
1024
1204
  "source_layer": "application",
1025
- "destination_spec_node_id": "application.dataobject",
1205
+ "destination_spec_node_id": "application.applicationprocess",
1026
1206
  "destination_layer": "application",
1027
- "predicate": "depends-on",
1207
+ "predicate": "flows-to",
1028
1208
  "cardinality": "many-to-many",
1029
1209
  "strength": "medium",
1030
- "required": false
1210
+ "required": false,
1211
+ "description": "When the upstream workflow completes or reaches a hand-off point, control or its output data passes to the downstream workflow, which continues the end-to-end sequence.",
1212
+ "evidence": [
1213
+ "The upstream process's final step starts the downstream workflow, publishes the message it consumes, or is chained to it in the orchestration definition (e.g. Step Functions, Airflow DAG, Temporal child workflow)."
1214
+ ]
1031
1215
  },
1032
- "application.applicationprocess.flows-to.application.applicationprocess": {
1033
- "id": "application.applicationprocess.flows-to.application.applicationprocess",
1216
+ "application.applicationprocess.realizes.application.applicationservice": {
1217
+ "id": "application.applicationprocess.realizes.application.applicationservice",
1034
1218
  "source_spec_node_id": "application.applicationprocess",
1035
1219
  "source_layer": "application",
1036
- "destination_spec_node_id": "application.applicationprocess",
1220
+ "destination_spec_node_id": "application.applicationservice",
1037
1221
  "destination_layer": "application",
1038
- "predicate": "flows-to",
1222
+ "predicate": "realizes",
1039
1223
  "cardinality": "many-to-many",
1040
1224
  "strength": "medium",
1041
- "required": false
1225
+ "required": false,
1226
+ "description": "The multi-step workflow or orchestration supplies the behaviour that makes the externally offered application service worth consuming, so the service's outcome is produced by running the process to completion.",
1227
+ "evidence": [
1228
+ "The service's public operation (e.g. an API handler or service-interface method) delegates its work to the workflow, saga or pipeline entry point and returns that process's end result to the caller."
1229
+ ]
1042
1230
  },
1043
1231
  "application.applicationprocess.realizes.business.businessprocess": {
1044
1232
  "id": "application.applicationprocess.realizes.business.businessprocess",
@@ -1049,7 +1237,11 @@
1049
1237
  "predicate": "realizes",
1050
1238
  "cardinality": "many-to-many",
1051
1239
  "strength": "medium",
1052
- "required": false
1240
+ "required": false,
1241
+ "description": "The automated workflow is the software execution of the business process, carrying out its ordered steps so the business result is reached without manual work.",
1242
+ "evidence": [
1243
+ "Process documentation or BPMN models map the business process steps to the workflow's stages, and the workflow code or definition is named for and traceable to that business process."
1244
+ ]
1053
1245
  },
1054
1246
  "application.applicationprocess.triggers.application.applicationevent": {
1055
1247
  "id": "application.applicationprocess.triggers.application.applicationevent",
@@ -1060,7 +1252,11 @@
1060
1252
  "predicate": "triggers",
1061
1253
  "cardinality": "many-to-many",
1062
1254
  "strength": "medium",
1063
- "required": false
1255
+ "required": false,
1256
+ "description": "Running the workflow, or reaching a particular step, emits the application event as a signal that a state change has happened, for other behaviour to react to.",
1257
+ "evidence": [
1258
+ "A step or completion handler in the workflow code publishes, emits or dispatches the named event type to an event bus, topic or in-process event dispatcher."
1259
+ ]
1064
1260
  },
1065
1261
  "application.applicationservice.accesses.business.businessobject": {
1066
1262
  "id": "application.applicationservice.accesses.business.businessobject",
@@ -1071,29 +1267,80 @@
1071
1267
  "predicate": "accesses",
1072
1268
  "cardinality": "many-to-many",
1073
1269
  "strength": "medium",
1074
- "required": false
1270
+ "required": false,
1271
+ "description": "The application service reads, creates or updates the business-level information, such as an order, invoice or contract, that its operations act upon on behalf of consumers.",
1272
+ "evidence": [
1273
+ "The service's operation signatures or handler code read or persist the entity that the business model documents as that business object, e.g. an OrderService.submit method that writes the Order record."
1274
+ ]
1275
+ },
1276
+ "application.applicationservice.accesses.data-store.collection": {
1277
+ "id": "application.applicationservice.accesses.data-store.collection",
1278
+ "source_spec_node_id": "application.applicationservice",
1279
+ "source_layer": "application",
1280
+ "destination_spec_node_id": "data-store.collection",
1281
+ "destination_layer": "data-store",
1282
+ "predicate": "accesses",
1283
+ "cardinality": "many-to-many",
1284
+ "strength": "medium",
1285
+ "required": false,
1286
+ "description": "The service reads or writes the collection's records as part of what it offers."
1075
1287
  },
1076
- "application.applicationservice.constrained-by.security.accesscondition": {
1077
- "id": "application.applicationservice.constrained-by.security.accesscondition",
1288
+ "application.applicationservice.accesses.application.dataobject": {
1289
+ "id": "application.applicationservice.accesses.application.dataobject",
1078
1290
  "source_spec_node_id": "application.applicationservice",
1079
1291
  "source_layer": "application",
1080
- "destination_spec_node_id": "security.accesscondition",
1292
+ "destination_spec_node_id": "application.dataobject",
1293
+ "destination_layer": "application",
1294
+ "predicate": "accesses",
1295
+ "cardinality": "many-to-many",
1296
+ "strength": "medium",
1297
+ "required": false,
1298
+ "description": "The application service's operations read, write or transform the code-level data structure as their input, output or working state.",
1299
+ "evidence": [
1300
+ "The service interface or implementation takes, returns or mutates the class, record or DTO, e.g. a method signature `CustomerDto getCustomer(id)` or repository calls that save that type."
1301
+ ]
1302
+ },
1303
+ "application.applicationservice.accesses.data-store.view": {
1304
+ "id": "application.applicationservice.accesses.data-store.view",
1305
+ "source_spec_node_id": "application.applicationservice",
1306
+ "source_layer": "application",
1307
+ "destination_spec_node_id": "data-store.view",
1308
+ "destination_layer": "data-store",
1309
+ "predicate": "accesses",
1310
+ "cardinality": "many-to-many",
1311
+ "strength": "medium",
1312
+ "required": false,
1313
+ "description": "The service reads the view as part of what it offers, such as a reporting service backed by a materialized view."
1314
+ },
1315
+ "application.applicationservice.constrained-by.security.securitypolicy": {
1316
+ "id": "application.applicationservice.constrained-by.security.securitypolicy",
1317
+ "source_spec_node_id": "application.applicationservice",
1318
+ "source_layer": "application",
1319
+ "destination_spec_node_id": "security.securitypolicy",
1081
1320
  "destination_layer": "security",
1082
1321
  "predicate": "constrained-by",
1083
1322
  "cardinality": "many-to-many",
1084
1323
  "strength": "medium",
1085
- "required": false
1324
+ "required": false,
1325
+ "description": "Invocation of the application service is governed by the security policy: the policy's rules decide which requests may call the service and under what conditions.",
1326
+ "evidence": [
1327
+ "A policy file, authorization middleware or gateway rule set bound to the service's routes applies the named policy's rules before the service is invoked."
1328
+ ]
1086
1329
  },
1087
- "application.applicationservice.delivers-value.motivation.value": {
1088
- "id": "application.applicationservice.delivers-value.motivation.value",
1330
+ "application.applicationservice.delivers.motivation.value": {
1331
+ "id": "application.applicationservice.delivers.motivation.value",
1089
1332
  "source_spec_node_id": "application.applicationservice",
1090
1333
  "source_layer": "application",
1091
1334
  "destination_spec_node_id": "motivation.value",
1092
1335
  "destination_layer": "motivation",
1093
- "predicate": "delivers-value",
1336
+ "predicate": "delivers",
1094
1337
  "cardinality": "many-to-many",
1095
1338
  "strength": "medium",
1096
- "required": false
1339
+ "required": false,
1340
+ "description": "Making the application service available produces the worth or benefit that stakeholders recognize as the value, such as faster checkout or reduced manual effort.",
1341
+ "evidence": [
1342
+ "Product or architecture documentation, business cases or OKR pages attribute the stated value explicitly to the service, ideally backed by a KPI dashboard tied to the service's usage."
1343
+ ]
1097
1344
  },
1098
1345
  "application.applicationservice.depends-on.application.applicationservice": {
1099
1346
  "id": "application.applicationservice.depends-on.application.applicationservice",
@@ -1104,18 +1351,11 @@
1104
1351
  "predicate": "depends-on",
1105
1352
  "cardinality": "many-to-many",
1106
1353
  "strength": "medium",
1107
- "required": false
1108
- },
1109
- "application.applicationservice.depends-on.application.dataobject": {
1110
- "id": "application.applicationservice.depends-on.application.dataobject",
1111
- "source_spec_node_id": "application.applicationservice",
1112
- "source_layer": "application",
1113
- "destination_spec_node_id": "application.dataobject",
1114
- "destination_layer": "application",
1115
- "predicate": "depends-on",
1116
- "cardinality": "many-to-many",
1117
- "strength": "medium",
1118
- "required": false
1354
+ "required": false,
1355
+ "description": "The application service cannot fulfil its operations without calling another application service, so the latter's unavailability breaks it.",
1356
+ "evidence": [
1357
+ "The service's implementation contains client calls, SDK imports or service-mesh configuration targeting the other service's endpoint, and its health check or failure handling reflects that dependency."
1358
+ ]
1119
1359
  },
1120
1360
  "application.applicationservice.flows-to.application.applicationservice": {
1121
1361
  "id": "application.applicationservice.flows-to.application.applicationservice",
@@ -1126,7 +1366,11 @@
1126
1366
  "predicate": "flows-to",
1127
1367
  "cardinality": "many-to-many",
1128
1368
  "strength": "medium",
1129
- "required": false
1369
+ "required": false,
1370
+ "description": "Data or control produced by the source application service is passed on to the destination application service as the next step in an end-to-end interaction.",
1371
+ "evidence": [
1372
+ "The source service publishes an event, message or response that the destination service consumes, as shown in queue/topic subscriptions, workflow definitions or distributed traces linking the two."
1373
+ ]
1130
1374
  },
1131
1375
  "application.applicationservice.realizes.business.businessservice": {
1132
1376
  "id": "application.applicationservice.realizes.business.businessservice",
@@ -1137,7 +1381,26 @@
1137
1381
  "predicate": "realizes",
1138
1382
  "cardinality": "many-to-many",
1139
1383
  "strength": "medium",
1140
- "required": false
1384
+ "required": false,
1385
+ "description": "The application service is the automated means through which the business service is actually delivered to its customers.",
1386
+ "evidence": [
1387
+ "Architecture documentation or service catalog entries map the business service to the application service, and the service's endpoints implement the business service's described operations."
1388
+ ]
1389
+ },
1390
+ "application.applicationservice.realizes.product.feature": {
1391
+ "id": "application.applicationservice.realizes.product.feature",
1392
+ "source_spec_node_id": "application.applicationservice",
1393
+ "source_layer": "application",
1394
+ "destination_spec_node_id": "product.feature",
1395
+ "destination_layer": "product",
1396
+ "predicate": "realizes",
1397
+ "cardinality": "many-to-many",
1398
+ "strength": "medium",
1399
+ "required": false,
1400
+ "description": "The application service supplies the operations that make the user-visible product feature work.",
1401
+ "evidence": [
1402
+ "The feature's spec, ticket or feature flag is wired to the service's endpoints, e.g. the frontend feature calls the service's API and the feature toggle gates its routes."
1403
+ ]
1141
1404
  },
1142
1405
  "application.applicationservice.realizes.motivation.goal": {
1143
1406
  "id": "application.applicationservice.realizes.motivation.goal",
@@ -1148,18 +1411,26 @@
1148
1411
  "predicate": "realizes",
1149
1412
  "cardinality": "many-to-many",
1150
1413
  "strength": "medium",
1151
- "required": false
1414
+ "required": false,
1415
+ "description": "The application service is put in place as a concrete means of achieving the stated goal.",
1416
+ "evidence": [
1417
+ "Architecture decision records or roadmap documentation cite the goal as the rationale for building the service and trace the service to that goal."
1418
+ ]
1152
1419
  },
1153
- "application.applicationservice.realizes.motivation.requirement": {
1154
- "id": "application.applicationservice.realizes.motivation.requirement",
1420
+ "application.applicationservice.realizes.product.softwarecapability": {
1421
+ "id": "application.applicationservice.realizes.product.softwarecapability",
1155
1422
  "source_spec_node_id": "application.applicationservice",
1156
1423
  "source_layer": "application",
1157
- "destination_spec_node_id": "motivation.requirement",
1158
- "destination_layer": "motivation",
1424
+ "destination_spec_node_id": "product.softwarecapability",
1425
+ "destination_layer": "product",
1159
1426
  "predicate": "realizes",
1160
1427
  "cardinality": "many-to-many",
1161
1428
  "strength": "medium",
1162
- "required": false
1429
+ "required": false,
1430
+ "description": "The application service provides the behaviour that gives the software platform the capability, such as a document export service giving it the ability to save documents to files.",
1431
+ "evidence": [
1432
+ "A capability map or product spec lists the application service as the implementation of the capability, and removing the service would leave the capability unavailable."
1433
+ ]
1163
1434
  },
1164
1435
  "application.applicationservice.references.apm.traceconfiguration": {
1165
1436
  "id": "application.applicationservice.references.apm.traceconfiguration",
@@ -1170,7 +1441,11 @@
1170
1441
  "predicate": "references",
1171
1442
  "cardinality": "many-to-many",
1172
1443
  "strength": "medium",
1173
- "required": false
1444
+ "required": false,
1445
+ "description": "The application service points to the tracer provider configuration that determines how its spans are sampled, propagated and processed, without depending on it functionally.",
1446
+ "evidence": [
1447
+ "The service's startup code or config (e.g. OTEL_* environment variables or an otel config file) names that sampler, propagator and span processor setup."
1448
+ ]
1174
1449
  },
1175
1450
  "application.applicationservice.requires.security.authenticationconfig": {
1176
1451
  "id": "application.applicationservice.requires.security.authenticationconfig",
@@ -1181,7 +1456,11 @@
1181
1456
  "predicate": "requires",
1182
1457
  "cardinality": "many-to-many",
1183
1458
  "strength": "medium",
1184
- "required": false
1459
+ "required": false,
1460
+ "description": "Consumers must be authenticated according to the authentication configuration, identity provider, MFA and session rules, before the application service will handle their calls.",
1461
+ "evidence": [
1462
+ "The service's security configuration or gateway route declares the identity provider, OIDC/JWT validation or MFA policy, and unauthenticated requests receive 401 responses."
1463
+ ]
1185
1464
  },
1186
1465
  "application.applicationservice.satisfies.motivation.constraint": {
1187
1466
  "id": "application.applicationservice.satisfies.motivation.constraint",
@@ -1192,29 +1471,98 @@
1192
1471
  "predicate": "satisfies",
1193
1472
  "cardinality": "many-to-many",
1194
1473
  "strength": "medium",
1195
- "required": false
1474
+ "required": false,
1475
+ "description": "The application service is designed and operated within the limits that the constraint imposes, such as a mandated technology, region or latency budget.",
1476
+ "evidence": [
1477
+ "Deployment manifests, technology choices or compliance checks for the service demonstrably conform to the constraint, e.g. data-residency settings restricting it to the required region."
1478
+ ]
1196
1479
  },
1197
- "application.applicationservice.serves.business.businessprocess": {
1198
- "id": "application.applicationservice.serves.business.businessprocess",
1480
+ "application.applicationservice.satisfies.motivation.requirement": {
1481
+ "id": "application.applicationservice.satisfies.motivation.requirement",
1199
1482
  "source_spec_node_id": "application.applicationservice",
1200
1483
  "source_layer": "application",
1201
- "destination_spec_node_id": "business.businessprocess",
1202
- "destination_layer": "business",
1484
+ "destination_spec_node_id": "motivation.requirement",
1485
+ "destination_layer": "motivation",
1486
+ "predicate": "satisfies",
1487
+ "cardinality": "many-to-many",
1488
+ "strength": "medium",
1489
+ "required": false,
1490
+ "description": "The application service provides the behavior that fulfils the stated requirement.",
1491
+ "evidence": [
1492
+ "A requirements traceability matrix, ticket link or acceptance test maps the requirement ID to the service's operations, and those tests pass against the service."
1493
+ ]
1494
+ },
1495
+ "application.applicationservice.serves.application.applicationcomponent": {
1496
+ "id": "application.applicationservice.serves.application.applicationcomponent",
1497
+ "source_spec_node_id": "application.applicationservice",
1498
+ "source_layer": "application",
1499
+ "destination_spec_node_id": "application.applicationcomponent",
1500
+ "destination_layer": "application",
1203
1501
  "predicate": "serves",
1204
1502
  "cardinality": "many-to-many",
1205
1503
  "strength": "medium",
1206
- "required": false
1504
+ "required": false,
1505
+ "description": "The application component consumes the application service's operations to carry out its own responsibilities.",
1506
+ "evidence": [
1507
+ "The component's code holds a client, injected interface or API call to the service, e.g. a dependency-injected PaymentService used inside the component."
1508
+ ]
1207
1509
  },
1208
- "application.applicationservice.serves.motivation.stakeholder": {
1209
- "id": "application.applicationservice.serves.motivation.stakeholder",
1510
+ "application.applicationservice.serves.application.applicationfunction": {
1511
+ "id": "application.applicationservice.serves.application.applicationfunction",
1210
1512
  "source_spec_node_id": "application.applicationservice",
1211
1513
  "source_layer": "application",
1212
- "destination_spec_node_id": "motivation.stakeholder",
1213
- "destination_layer": "motivation",
1514
+ "destination_spec_node_id": "application.applicationfunction",
1515
+ "destination_layer": "application",
1516
+ "predicate": "serves",
1517
+ "cardinality": "many-to-many",
1518
+ "strength": "medium",
1519
+ "required": false,
1520
+ "description": "The application function invokes the application service's operations as part of the internal work it performs.",
1521
+ "evidence": [
1522
+ "The function's implementation calls the service's interface or endpoint, visible as a method call or HTTP/RPC client invocation inside that function's code."
1523
+ ]
1524
+ },
1525
+ "application.applicationservice.serves.application.applicationinteraction": {
1526
+ "id": "application.applicationservice.serves.application.applicationinteraction",
1527
+ "source_spec_node_id": "application.applicationservice",
1528
+ "source_layer": "application",
1529
+ "destination_spec_node_id": "application.applicationinteraction",
1530
+ "destination_layer": "application",
1531
+ "predicate": "serves",
1532
+ "cardinality": "many-to-many",
1533
+ "strength": "medium",
1534
+ "required": false,
1535
+ "description": "The collaborating components call the application service as part of the joint interaction, which uses the service's results to complete the exchange."
1536
+ },
1537
+ "application.applicationservice.serves.application.applicationprocess": {
1538
+ "id": "application.applicationservice.serves.application.applicationprocess",
1539
+ "source_spec_node_id": "application.applicationservice",
1540
+ "source_layer": "application",
1541
+ "destination_spec_node_id": "application.applicationprocess",
1542
+ "destination_layer": "application",
1543
+ "predicate": "serves",
1544
+ "cardinality": "many-to-many",
1545
+ "strength": "medium",
1546
+ "required": false,
1547
+ "description": "One or more steps of the application process call the application service to obtain the results the sequence needs.",
1548
+ "evidence": [
1549
+ "The workflow, saga or pipeline definition includes a step that invokes the service's operation, e.g. a Temporal activity or step function task targeting its endpoint."
1550
+ ]
1551
+ },
1552
+ "application.applicationservice.serves.business.businessprocess": {
1553
+ "id": "application.applicationservice.serves.business.businessprocess",
1554
+ "source_spec_node_id": "application.applicationservice",
1555
+ "source_layer": "application",
1556
+ "destination_spec_node_id": "business.businessprocess",
1557
+ "destination_layer": "business",
1214
1558
  "predicate": "serves",
1215
1559
  "cardinality": "many-to-many",
1216
1560
  "strength": "medium",
1217
- "required": false
1561
+ "required": false,
1562
+ "description": "The application service automates or supports activities within the business process, which uses it to reach its business result.",
1563
+ "evidence": [
1564
+ "Process documentation or BPMN models show process tasks performed via the service, and the service's API is called from the system that executes those tasks."
1565
+ ]
1218
1566
  },
1219
1567
  "application.dataobject.aggregates.application.dataobject": {
1220
1568
  "id": "application.dataobject.aggregates.application.dataobject",
@@ -1225,7 +1573,11 @@
1225
1573
  "predicate": "aggregates",
1226
1574
  "cardinality": "many-to-many",
1227
1575
  "strength": "medium",
1228
- "required": false
1576
+ "required": false,
1577
+ "description": "The containing data structure groups references to another data structure whose instances have their own identity and lifecycle, such as an Order holding the Customer it belongs to or a Cart listing Product records that persist after the cart is discarded.",
1578
+ "evidence": [
1579
+ "The containing class declares a field, collection or ID reference typed to the other data object, and that object is constructed, persisted or looked up elsewhere and passed in rather than created by the container."
1580
+ ]
1229
1581
  },
1230
1582
  "application.dataobject.composes.application.dataobject": {
1231
1583
  "id": "application.dataobject.composes.application.dataobject",
@@ -1236,7 +1588,11 @@
1236
1588
  "predicate": "composes",
1237
1589
  "cardinality": "many-to-many",
1238
1590
  "strength": "medium",
1239
- "required": false
1591
+ "required": false,
1592
+ "description": "The whole data structure owns an embedded part structure that has no independent identity and is created, copied, serialized and discarded together with it, such as an Invoice and its InvoiceLine items or a Person and its embedded Address value object.",
1593
+ "evidence": [
1594
+ "The part type appears only as a nested or embedded member of the whole, for example a nested record, an @Embedded or @ElementCollection mapping, a cascade-all/orphan-removal association, or a nested message in a protobuf or JSON schema, and it is instantiated inside the whole's constructor or builder."
1595
+ ]
1240
1596
  },
1241
1597
  "application.dataobject.realizes.application.dataobject": {
1242
1598
  "id": "application.dataobject.realizes.application.dataobject",
@@ -1247,7 +1603,26 @@
1247
1603
  "predicate": "realizes",
1248
1604
  "cardinality": "many-to-many",
1249
1605
  "strength": "medium",
1250
- "required": false
1606
+ "required": false,
1607
+ "description": "The concrete data structure gives a tangible implementation of an abstract or contract-level data definition, such as a DTO class implementing a shared interface or type contract, or a generated class materializing a schema-defined message type.",
1608
+ "evidence": [
1609
+ "The concrete class or struct declares that it implements the abstract type (for example `implements`, a TypeScript `satisfies` or structural conformance check), or a code generator config such as OpenAPI, protobuf or Avro shows the class produced from the abstract schema definition."
1610
+ ]
1611
+ },
1612
+ "application.dataobject.specializes.application.dataobject": {
1613
+ "id": "application.dataobject.specializes.application.dataobject",
1614
+ "source_spec_node_id": "application.dataobject",
1615
+ "source_layer": "application",
1616
+ "destination_spec_node_id": "application.dataobject",
1617
+ "destination_layer": "application",
1618
+ "predicate": "specializes",
1619
+ "cardinality": "many-to-many",
1620
+ "strength": "medium",
1621
+ "required": false,
1622
+ "description": "A data object is a subtype of another data object: it carries every field of the general one and adds or narrows some, so an instance of it is also an instance of the general one.",
1623
+ "evidence": [
1624
+ "A TypeScript interface or type extending another (interface ImportResult extends BaseResult), or a data class deriving from another data class, both classified as application data objects; CBM INHERITS."
1625
+ ]
1251
1626
  }
1252
1627
  }
1253
1628
  }