@documentation-robotics/cli 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/README.md +46 -16
  2. package/dist/analysis/relationship-classifier.js +2 -9
  3. package/dist/analysis/relationship-classifier.js.map +2 -2
  4. package/dist/analyzers/active-analyzer.js +62 -0
  5. package/dist/analyzers/active-analyzer.js.map +7 -0
  6. package/dist/analyzers/call-graph-utils.js +2 -2
  7. package/dist/analyzers/call-graph-utils.js.map +2 -2
  8. package/dist/analyzers/cards/build.js +191 -0
  9. package/dist/analyzers/cards/build.js.map +7 -0
  10. package/dist/analyzers/cards/classify.js +42 -0
  11. package/dist/analyzers/cards/classify.js.map +7 -0
  12. package/dist/analyzers/cards/edge-index.js +44 -0
  13. package/dist/analyzers/cards/edge-index.js.map +7 -0
  14. package/dist/analyzers/cards/extract.js +138 -0
  15. package/dist/analyzers/cards/extract.js.map +7 -0
  16. package/dist/analyzers/cards/facts.js +46 -0
  17. package/dist/analyzers/cards/facts.js.map +7 -0
  18. package/dist/analyzers/cards/graph.js +42 -0
  19. package/dist/analyzers/cards/graph.js.map +7 -0
  20. package/dist/analyzers/cards/index.js +8 -0
  21. package/dist/analyzers/cards/index.js.map +7 -0
  22. package/dist/analyzers/cards/routes.js +96 -0
  23. package/dist/analyzers/cards/routes.js.map +7 -0
  24. package/dist/analyzers/cards/tier0.js +18 -0
  25. package/dist/analyzers/cards/tier0.js.map +7 -0
  26. package/dist/analyzers/cards/types.js +1 -0
  27. package/dist/analyzers/cards/types.js.map +7 -0
  28. package/dist/analyzers/cbm-analyzer.js +270 -174
  29. package/dist/analyzers/cbm-analyzer.js.map +2 -2
  30. package/dist/analyzers/cbm-responses.js +342 -0
  31. package/dist/analyzers/cbm-responses.js.map +7 -0
  32. package/dist/analyzers/code-changes.js +159 -0
  33. package/dist/analyzers/code-changes.js.map +7 -0
  34. package/dist/analyzers/edge-relationships.js +49 -0
  35. package/dist/analyzers/edge-relationships.js.map +7 -0
  36. package/dist/analyzers/extraction-plan.js +541 -0
  37. package/dist/analyzers/extraction-plan.js.map +7 -0
  38. package/dist/analyzers/index-job.js +229 -0
  39. package/dist/analyzers/index-job.js.map +7 -0
  40. package/dist/analyzers/mapping-loader.js +9 -0
  41. package/dist/analyzers/mapping-loader.js.map +2 -2
  42. package/dist/analyzers/tier0-rules.js +153 -0
  43. package/dist/analyzers/tier0-rules.js.map +7 -0
  44. package/dist/analyzers/types.js.map +1 -1
  45. package/dist/audit/relationships/ai/prompts.js +10 -10
  46. package/dist/audit/relationships/ai/prompts.js.map +2 -2
  47. package/dist/audit/relationships/analysis/layer-templates.js +52 -52
  48. package/dist/audit/relationships/analysis/layer-templates.js.map +1 -1
  49. package/dist/cli.js +23 -11
  50. package/dist/cli.js.map +2 -2
  51. package/dist/coding-agents/default-permissions.js +31 -1
  52. package/dist/coding-agents/default-permissions.js.map +2 -2
  53. package/dist/coding-agents/drbot-mcp.js +269 -0
  54. package/dist/coding-agents/drbot-mcp.js.map +7 -0
  55. package/dist/commands/add.js +7 -4
  56. package/dist/commands/add.js.map +2 -2
  57. package/dist/commands/analyzer.js +143 -40
  58. package/dist/commands/analyzer.js.map +2 -2
  59. package/dist/commands/changeset-verify.js +63 -0
  60. package/dist/commands/changeset-verify.js.map +7 -0
  61. package/dist/commands/changeset.js +80 -29
  62. package/dist/commands/changeset.js.map +2 -2
  63. package/dist/commands/delete.js +10 -4
  64. package/dist/commands/delete.js.map +2 -2
  65. package/dist/commands/farm.js +176 -60
  66. package/dist/commands/farm.js.map +2 -2
  67. package/dist/commands/init.js +9 -26
  68. package/dist/commands/init.js.map +2 -2
  69. package/dist/commands/mcp.js +40 -21
  70. package/dist/commands/mcp.js.map +3 -3
  71. package/dist/commands/relationship.js +208 -37
  72. package/dist/commands/relationship.js.map +2 -2
  73. package/dist/commands/reports.js +3 -3
  74. package/dist/commands/reports.js.map +2 -2
  75. package/dist/commands/update.js +52 -32
  76. package/dist/commands/update.js.map +2 -2
  77. package/dist/commands/upgrade.js +99 -103
  78. package/dist/commands/upgrade.js.map +3 -3
  79. package/dist/commands/validate.js +19 -3
  80. package/dist/commands/validate.js.map +2 -2
  81. package/dist/commands/version.js +1 -1
  82. package/dist/commands/visualize.js +34 -15
  83. package/dist/commands/visualize.js.map +2 -2
  84. package/dist/core/annotation-store.js +15 -5
  85. package/dist/core/annotation-store.js.map +2 -2
  86. package/dist/core/catalog-migration.js +34 -0
  87. package/dist/core/catalog-migration.js.map +7 -0
  88. package/dist/core/changeset-analysis.js +421 -0
  89. package/dist/core/changeset-analysis.js.map +7 -0
  90. package/dist/core/changeset-base-index.js +160 -0
  91. package/dist/core/changeset-base-index.js.map +7 -0
  92. package/dist/core/changeset-brief-compact.js +256 -0
  93. package/dist/core/changeset-brief-compact.js.map +7 -0
  94. package/dist/core/changeset-brief-delta.js +102 -0
  95. package/dist/core/changeset-brief-delta.js.map +7 -0
  96. package/dist/core/changeset-graph.js +281 -0
  97. package/dist/core/changeset-graph.js.map +7 -0
  98. package/dist/core/changeset-only-guard.js +32 -0
  99. package/dist/core/changeset-only-guard.js.map +7 -0
  100. package/dist/core/changeset-summary.js +68 -0
  101. package/dist/core/changeset-summary.js.map +7 -0
  102. package/dist/core/changeset-validator.js +66 -20
  103. package/dist/core/changeset-validator.js.map +2 -2
  104. package/dist/core/changeset-verify.js +848 -0
  105. package/dist/core/changeset-verify.js.map +7 -0
  106. package/dist/core/changeset.js +56 -9
  107. package/dist/core/changeset.js.map +2 -2
  108. package/dist/core/element-type-migration.js +145 -0
  109. package/dist/core/element-type-migration.js.map +7 -0
  110. package/dist/core/extraction-observability.js +161 -0
  111. package/dist/core/extraction-observability.js.map +7 -0
  112. package/dist/core/farm-manifest.js +12 -6
  113. package/dist/core/farm-manifest.js.map +2 -2
  114. package/dist/core/farm-sync-engine.js +1 -1
  115. package/dist/core/farm-sync-engine.js.map +2 -2
  116. package/dist/core/farm-sync-state.js +10 -2
  117. package/dist/core/farm-sync-state.js.map +2 -2
  118. package/dist/core/migration-registry.js +88 -47
  119. package/dist/core/migration-registry.js.map +2 -2
  120. package/dist/core/model-upgrade.js +102 -0
  121. package/dist/core/model-upgrade.js.map +7 -0
  122. package/dist/core/model.js +82 -30
  123. package/dist/core/model.js.map +2 -2
  124. package/dist/core/mutation-handler.js +71 -6
  125. package/dist/core/mutation-handler.js.map +2 -2
  126. package/dist/core/project-init.js +53 -0
  127. package/dist/core/project-init.js.map +7 -0
  128. package/dist/core/relationship-migration-table.js +6639 -0
  129. package/dist/core/relationship-migration-table.js.map +7 -0
  130. package/dist/core/relationship-migration.js +272 -0
  131. package/dist/core/relationship-migration.js.map +7 -0
  132. package/dist/core/relationship-prune.js +49 -0
  133. package/dist/core/relationship-prune.js.map +7 -0
  134. package/dist/core/relationship-staging.js +161 -0
  135. package/dist/core/relationship-staging.js.map +7 -0
  136. package/dist/core/relationships.js +26 -4
  137. package/dist/core/relationships.js.map +2 -2
  138. package/dist/core/report-data-model.js +7 -13
  139. package/dist/core/report-data-model.js.map +2 -2
  140. package/dist/core/staged-changeset-storage.js +145 -18
  141. package/dist/core/staged-changeset-storage.js.map +2 -2
  142. package/dist/core/staged-source-reference.js +28 -0
  143. package/dist/core/staged-source-reference.js.map +7 -0
  144. package/dist/core/staging-area.js +166 -24
  145. package/dist/core/staging-area.js.map +2 -2
  146. package/dist/core/upgrade-plan.js +117 -0
  147. package/dist/core/upgrade-plan.js.map +7 -0
  148. package/dist/core/virtual-projection.js +13 -5
  149. package/dist/core/virtual-projection.js.map +2 -2
  150. package/dist/export/archimate-exporter.js +1 -0
  151. package/dist/export/archimate-exporter.js.map +2 -2
  152. package/dist/generated/compiled-validators.js +2 -2
  153. package/dist/generated/compiled-validators.js.map +2 -2
  154. package/dist/generated/layer-registry.js +16 -16
  155. package/dist/generated/layer-registry.js.map +2 -2
  156. package/dist/generated/node-types.js +186 -168
  157. package/dist/generated/node-types.js.map +2 -2
  158. package/dist/generated/relationship-index.js +2468 -7913
  159. package/dist/generated/relationship-index.js.map +2 -2
  160. package/dist/integrations/claude_code/.claude-plugin/plugin.json +24 -0
  161. package/dist/integrations/claude_code/agents/dr-architect.md +30 -3
  162. package/dist/integrations/claude_code/agents/dr-extractor.md +8 -2
  163. package/dist/integrations/claude_code/commands/dr-analyzer.md +565 -0
  164. package/dist/integrations/claude_code/commands/dr-changeset.md +2 -1
  165. package/dist/integrations/claude_code/commands/dr-map.md +20 -1
  166. package/dist/integrations/claude_code/commands/dr-plan.md +66 -0
  167. package/dist/integrations/claude_code/commands/dr-relate.md +106 -96
  168. package/dist/integrations/claude_code/commands/dr-verify.md +45 -2
  169. package/dist/integrations/claude_code/docs/END_TO_END_WALKTHROUGH.md +14 -0
  170. package/dist/integrations/claude_code/docs/MCP_SERVER.md +47 -26
  171. package/dist/integrations/claude_code/docs/QUICK_START.md +37 -8
  172. package/dist/integrations/claude_code/docs/README.md +68 -2
  173. package/dist/integrations/claude_code/plugin-agents/dr-advisor.md +255 -0
  174. package/dist/integrations/claude_code/plugin-agents/dr-architect.md +306 -0
  175. package/dist/integrations/claude_code/skills/dr_01_motivation_layer/SKILL.md +93 -72
  176. package/dist/integrations/claude_code/skills/dr_02_business_layer/SKILL.md +163 -126
  177. package/dist/integrations/claude_code/skills/dr_03_product_layer/SKILL.md +161 -126
  178. package/dist/integrations/claude_code/skills/dr_04_security_layer/SKILL.md +153 -133
  179. package/dist/integrations/claude_code/skills/dr_05_application_layer/SKILL.md +129 -100
  180. package/dist/integrations/claude_code/skills/dr_06_technology_layer/SKILL.md +111 -94
  181. package/dist/integrations/claude_code/skills/dr_07_api_layer/SKILL.md +143 -157
  182. package/dist/integrations/claude_code/skills/dr_08_data_model_layer/SKILL.md +117 -33
  183. package/dist/integrations/claude_code/skills/dr_09_dataset_layer/SKILL.md +74 -25
  184. package/dist/integrations/claude_code/skills/dr_10_ux_layer/SKILL.md +88 -12
  185. package/dist/integrations/claude_code/skills/dr_11_navigation_layer/SKILL.md +83 -24
  186. package/dist/integrations/claude_code/skills/dr_12_apm_layer/SKILL.md +57 -12
  187. package/dist/integrations/claude_code/skills/dr_13_testing_layer/SKILL.md +95 -15
  188. package/dist/integrations/claude_code/skills/dr_change_planning/SKILL.md +178 -0
  189. package/dist/integrations/claude_code/skills/dr_changeset_reviewer/SKILL.md +8 -0
  190. package/dist/integrations/claude_code/skills/dr_engineering_guide/SKILL.md +6 -1
  191. package/dist/integrations/github_copilot/agents/dr-architect.md +3 -1
  192. package/dist/integrations/github_copilot/skills/dr_01_motivation_layer/SKILL.md +182 -102
  193. package/dist/integrations/github_copilot/skills/dr_02_business_layer/SKILL.md +266 -148
  194. package/dist/integrations/github_copilot/skills/dr_03_product_layer/SKILL.md +547 -86
  195. package/dist/integrations/github_copilot/skills/dr_04_security_layer/SKILL.md +164 -169
  196. package/dist/integrations/github_copilot/skills/dr_05_application_layer/SKILL.md +420 -150
  197. package/dist/integrations/github_copilot/skills/dr_06_technology_layer/SKILL.md +331 -138
  198. package/dist/integrations/github_copilot/skills/dr_07_api_layer/SKILL.md +265 -201
  199. package/dist/integrations/github_copilot/skills/dr_08_data_model_layer/SKILL.md +181 -58
  200. package/dist/integrations/github_copilot/skills/dr_09_dataset_layer/SKILL.md +209 -57
  201. package/dist/integrations/github_copilot/skills/dr_10_ux_layer/SKILL.md +277 -112
  202. package/dist/integrations/github_copilot/skills/dr_11_navigation_layer/SKILL.md +219 -70
  203. package/dist/integrations/github_copilot/skills/dr_12_apm_layer/SKILL.md +189 -105
  204. package/dist/integrations/github_copilot/skills/dr_13_testing_layer/SKILL.md +225 -102
  205. package/dist/integrations/github_copilot/skills/dr_change_planning/SKILL.md +177 -0
  206. package/dist/integrations/github_copilot/skills/dr_changeset_reviewer/SKILL.md +3 -0
  207. package/dist/integrations/hash-utils.js.map +2 -2
  208. package/dist/mcp/api-key-manager.js +14 -1
  209. package/dist/mcp/api-key-manager.js.map +2 -2
  210. package/dist/mcp/changeset-only.js +45 -0
  211. package/dist/mcp/changeset-only.js.map +7 -0
  212. package/dist/mcp/project-root.js +85 -0
  213. package/dist/mcp/project-root.js.map +7 -0
  214. package/dist/mcp/server-instructions.js +27 -0
  215. package/dist/mcp/server-instructions.js.map +7 -0
  216. package/dist/mcp/strict-schema.js +52 -0
  217. package/dist/mcp/strict-schema.js.map +7 -0
  218. package/dist/mcp/tool-registry.js +55 -5
  219. package/dist/mcp/tool-registry.js.map +2 -2
  220. package/dist/mcp/tools/changeset-analysis-tools.js +98 -0
  221. package/dist/mcp/tools/changeset-analysis-tools.js.map +7 -0
  222. package/dist/mcp/tools/changeset-commit.js +224 -0
  223. package/dist/mcp/tools/changeset-commit.js.map +7 -0
  224. package/dist/mcp/tools/changeset-editing.js +260 -0
  225. package/dist/mcp/tools/changeset-editing.js.map +7 -0
  226. package/dist/mcp/tools/changeset-lifecycle.js +83 -0
  227. package/dist/mcp/tools/changeset-lifecycle.js.map +7 -0
  228. package/dist/mcp/tools/changeset-shared.js +31 -0
  229. package/dist/mcp/tools/changeset-shared.js.map +7 -0
  230. package/dist/mcp/tools/changeset-show.js +17 -1
  231. package/dist/mcp/tools/changeset-show.js.map +2 -2
  232. package/dist/mcp/tools/changeset-verify.js +49 -0
  233. package/dist/mcp/tools/changeset-verify.js.map +7 -0
  234. package/dist/mcp/tools/codebase-extract.js +836 -0
  235. package/dist/mcp/tools/codebase-extract.js.map +7 -0
  236. package/dist/mcp/tools/codebase-index.js +125 -0
  237. package/dist/mcp/tools/codebase-index.js.map +7 -0
  238. package/dist/mcp/tools/codebase-shared.js +265 -0
  239. package/dist/mcp/tools/codebase-shared.js.map +7 -0
  240. package/dist/mcp/tools/codebase-verify.js +48 -0
  241. package/dist/mcp/tools/codebase-verify.js.map +7 -0
  242. package/dist/mcp/tools/index.js +34 -1
  243. package/dist/mcp/tools/index.js.map +2 -2
  244. package/dist/mcp/tools/model-add.js +191 -74
  245. package/dist/mcp/tools/model-add.js.map +2 -2
  246. package/dist/mcp/tools/model-delete.js +2 -2
  247. package/dist/mcp/tools/model-delete.js.map +2 -2
  248. package/dist/mcp/tools/model-search.js +14 -0
  249. package/dist/mcp/tools/model-search.js.map +2 -2
  250. package/dist/mcp/tools/model-show.js +29 -2
  251. package/dist/mcp/tools/model-show.js.map +2 -2
  252. package/dist/mcp/tools/model-trace.js +93 -30
  253. package/dist/mcp/tools/model-trace.js.map +2 -2
  254. package/dist/mcp/tools/model-update.js +46 -26
  255. package/dist/mcp/tools/model-update.js.map +2 -2
  256. package/dist/mcp/tools/model-validate.js +46 -4
  257. package/dist/mcp/tools/model-validate.js.map +2 -2
  258. package/dist/mcp/tools/project-status-collectors.js +381 -0
  259. package/dist/mcp/tools/project-status-collectors.js.map +7 -0
  260. package/dist/mcp/tools/project-status.js +237 -0
  261. package/dist/mcp/tools/project-status.js.map +7 -0
  262. package/dist/mcp/tools/project-tools.js +505 -0
  263. package/dist/mcp/tools/project-tools.js.map +7 -0
  264. package/dist/mcp/tools/relationship-tools.js +167 -0
  265. package/dist/mcp/tools/relationship-tools.js.map +7 -0
  266. package/dist/mcp/tools/review-open.js +210 -0
  267. package/dist/mcp/tools/review-open.js.map +7 -0
  268. package/dist/mcp/tools/shared.js +35 -4
  269. package/dist/mcp/tools/shared.js.map +2 -2
  270. package/dist/mcp/tools/spec-type.js +90 -0
  271. package/dist/mcp/tools/spec-type.js.map +7 -0
  272. package/dist/reports/model-report-orchestrator.js +31 -2
  273. package/dist/reports/model-report-orchestrator.js.map +2 -2
  274. package/dist/schemas/bundled/analyzers/cbm.json +1200 -70
  275. package/dist/schemas/bundled/analyzers/manifest.json +2 -2
  276. package/dist/schemas/bundled/api.json +1029 -1658
  277. package/dist/schemas/bundled/apm.json +499 -734
  278. package/dist/schemas/bundled/application.json +735 -371
  279. package/dist/schemas/bundled/base.json +3 -220
  280. package/dist/schemas/bundled/business.json +452 -366
  281. package/dist/schemas/bundled/data-model.json +395 -411
  282. package/dist/schemas/bundled/data-store.json +334 -558
  283. package/dist/schemas/bundled/manifest.json +18 -18
  284. package/dist/schemas/bundled/motivation.json +349 -368
  285. package/dist/schemas/bundled/navigation.json +415 -731
  286. package/dist/schemas/bundled/product.json +325 -159
  287. package/dist/schemas/bundled/security.json +864 -1232
  288. package/dist/schemas/bundled/technology.json +574 -703
  289. package/dist/schemas/bundled/testing.json +865 -1646
  290. package/dist/schemas/bundled/ux.json +739 -1352
  291. package/dist/server/schemas.js +8 -0
  292. package/dist/server/schemas.js.map +2 -2
  293. package/dist/server/server.js +686 -231
  294. package/dist/server/server.js.map +3 -3
  295. package/dist/server/viewer-registry.js +264 -0
  296. package/dist/server/viewer-registry.js.map +7 -0
  297. package/dist/server-entry.js +2 -1
  298. package/dist/server-entry.js.map +2 -2
  299. package/dist/telemetry/index.js +1 -1
  300. package/dist/utils/ansi-suppressor.js +6 -8
  301. package/dist/utils/ansi-suppressor.js.map +2 -2
  302. package/dist/utils/attribute-patch.js +41 -0
  303. package/dist/utils/attribute-patch.js.map +7 -0
  304. package/dist/utils/error-hints.js +29 -0
  305. package/dist/utils/error-hints.js.map +7 -0
  306. package/dist/utils/errors.js +9 -3
  307. package/dist/utils/errors.js.map +2 -2
  308. package/dist/utils/id-generator.js +5 -2
  309. package/dist/utils/id-generator.js.map +2 -2
  310. package/dist/utils/project-paths.js +26 -1
  311. package/dist/utils/project-paths.js.map +2 -2
  312. package/dist/utils/source-reference.js +64 -31
  313. package/dist/utils/source-reference.js.map +2 -2
  314. package/dist/utils/spec-version.js +2 -2
  315. package/dist/utils/spec-version.js.map +1 -1
  316. package/dist/validators/composed-reference-validator.js +5 -27
  317. package/dist/validators/composed-reference-validator.js.map +2 -2
  318. package/dist/validators/model-warnings.js +28 -0
  319. package/dist/validators/model-warnings.js.map +7 -0
  320. package/dist/validators/reference-validator.js +0 -7
  321. package/dist/validators/reference-validator.js.map +2 -2
  322. package/dist/validators/relationship-schema-validator.js +3 -3
  323. package/dist/validators/relationship-schema-validator.js.map +2 -2
  324. package/dist/validators/schema-validator.js +27 -9
  325. package/dist/validators/schema-validator.js.map +2 -2
  326. package/dist/validators/types.js.map +1 -1
  327. package/dist/viewer/README.md +6 -6
  328. package/dist/viewer/assets/main-CUOQGGRA.css +1 -0
  329. package/dist/viewer/assets/main-DvH3gYrI.js +84 -0
  330. package/dist/viewer/index.html +2 -2
  331. package/dist/viewer/manifest.json +10 -10
  332. package/dist/viewer/version.json +1 -1
  333. package/package.json +2 -1
  334. package/dist/viewer/assets/main-B7AOQXXX.js +0 -81
  335. package/dist/viewer/assets/main-vdrFrG7q.css +0 -1
@@ -15,13 +15,13 @@ triggers:
15
15
  "index",
16
16
  "field"
17
17
  ]
18
- version: 0.8.1
18
+ version: 0.8.3
19
19
  ---
20
20
 
21
21
  # Data Store Layer Skill
22
22
 
23
23
  **Layer Number:** 08
24
- **Specification:** Metadata Model Spec v0.8.1
24
+ **Specification:** Metadata Model Spec v0.8.3
25
25
  **Purpose:** Defines paradigm-neutral physical storage modeling, capturing databases, collections/tables, fields/columns, indexes, views, stored logic, validation rules, access patterns, event handlers, and retention policies across relational, document, key-value, time-series, and graph stores.
26
26
 
27
27
  ---
@@ -46,6 +46,11 @@ This layer supports **multiple storage paradigms**: relational (PostgreSQL, MySQ
46
46
 
47
47
  **Central Entity:** The **Collection** (table, document collection, stream) is the core modeling unit.
48
48
 
49
+ > **`storedlogic` vs `collection` — common mistake:**
50
+ > `storedlogic` is for stored **procedures, triggers, and user-defined functions** — executable logic that lives inside the database.
51
+ > For relational **tables** (or document collections, streams, or buckets), use `collection` with `collectionType: TABLE` (or `DOCUMENT`, `STREAM`, etc.).
52
+ > Using `storedlogic` for a table will fail schema validation.
53
+ >
49
54
  > **CLI Introspection:** Run `dr schema types data-store` for the authoritative, always-current list of node types.
50
55
  > Run `dr schema node <type-id>` for full attribute details on any type (e.g., `dr schema node data-store.collection`).
51
56
 
@@ -71,6 +76,53 @@ This layer supports **multiple storage paradigms**: relational (PostgreSQL, MySQ
71
76
 
72
77
  ---
73
78
 
79
+ ## Type Decision Tree
80
+
81
+ Use this decision tree **before assigning a type** to any storage element.
82
+
83
+ Evaluate questions top-to-bottom. Stop at the first YES match.
84
+ If none match, reconsider whether the concept belongs in a different layer.
85
+
86
+ > **storedlogic vs. eventhandler:** If the element describes _what fires and when_ (the reactive trigger mechanism), use `eventhandler`. If it describes _the computation or logic that runs_ (a function, procedure, or script), use `storedlogic`.
87
+
88
+ ```
89
+ Is this a database server/instance/cluster?
90
+ YES → data-store.database (e.g., PostgreSQL instance, MongoDB Atlas cluster)
91
+
92
+ Is this a logical grouping of collections (schema, keyspace, database prefix)?
93
+ YES → data-store.namespace (e.g., PostgreSQL schema, Cassandra keyspace, MongoDB database)
94
+
95
+ Is this a primary storage unit (table, document collection, stream, bucket, topic)?
96
+ YES → data-store.collection (e.g., users table, orders collection, events stream)
97
+
98
+ Is this a field or column definition inside a collection?
99
+ YES → data-store.field (e.g., email VARCHAR, user_id UUID, created_at TIMESTAMP)
100
+
101
+ Is this a query optimization index (B-tree, hash, compound, text, vector)?
102
+ YES → data-store.index (e.g., idx_users_email, full-text search index)
103
+
104
+ Is this a derived or materialized view over one or more collections?
105
+ YES → data-store.view (e.g., active_users_view, monthly_revenue_mv)
106
+
107
+ Is this a stored procedure, function, or user-defined aggregate in the database?
108
+ YES → data-store.storedlogic (e.g., calculate_discount(), get_user_stats(), normalize_email())
109
+
110
+ Is this a database-level validation constraint or schema enforcement rule?
111
+ YES → data-store.validationrule (e.g., check constraint, JSON schema validator,
112
+ foreign key [database-enforced referential integrity — not a cross-layer relationship])
113
+
114
+ Is this a named query access pattern describing how the application reads or writes data?
115
+ YES → data-store.accesspattern (e.g., get-user-by-email, list-orders-by-date, time-range-query)
116
+
117
+ Is this a CDC handler, database trigger, or event-driven data workflow?
118
+ YES → data-store.eventhandler (e.g., on-insert audit log, DynamoDB Streams handler)
119
+
120
+ Is this a TTL, archival, or data lifecycle rule?
121
+ YES → data-store.retentionpolicy (e.g., 90-day audit log TTL, GDPR deletion policy)
122
+ ```
123
+
124
+ ---
125
+
74
126
  ## When to Use This Skill
75
127
 
76
128
  Activate when the user:
@@ -85,19 +137,81 @@ Activate when the user:
85
137
 
86
138
  ---
87
139
 
88
- ## Cross-Layer Relationships
89
-
90
- **Outgoing (Data Store → Other Layers):**
91
-
92
- - `x-json-schema` → Data Model Layer (what logical schema does this implement?)
93
- - `x-governed-by-*` → Security Layer (data access policies)
94
- - `x-apm-performance-metrics` → APM Layer (query performance monitoring)
140
+ ## Intra-Layer Relationships
141
+
142
+ Containment is one level at a time (database → namespace → collection → fields, indexes, validation
143
+ rules, event handlers). Stored data is passive: collections, views, fields and databases are accessed,
144
+ referenced and mapped, and never serve or trigger. Behaviour in the store is stored logic, event
145
+ handlers and access patterns.
146
+
147
+ | Source Type | Predicate | Target Type | Example |
148
+ | --------------- | ------------ | -------------- | ---------------------------------------------------------------------- |
149
+ | Database | composes | Namespace | "orders-db" composes the `public` schema |
150
+ | Database | composes | Collection | "sessions-redis" composes the `session:*` key collection |
151
+ | Database | replicates | Database | "orders-db-primary" replicates to "orders-db-replica" |
152
+ | Database | federates | Database | "analytics-trino" federates "orders-db" |
153
+ | Namespace | composes | Collection | `public` schema composes the `orders` table |
154
+ | Namespace | composes | View | `reporting` schema composes `monthly_revenue_mv` |
155
+ | Namespace | composes | StoredLogic | `public` schema composes `calculate_discount()` |
156
+ | Collection | composes | Field | `orders` composes `orders.customer_id` |
157
+ | Collection | composes | Index | `orders` composes `idx_orders_customer_id` |
158
+ | Collection | composes | ValidationRule | `orders` composes the `chk_orders_total_positive` check constraint |
159
+ | Collection | composes | EventHandler | `orders` composes the `orders_audit_trigger` |
160
+ | Collection | references | Collection | `orders` references `customers` (foreign key) |
161
+ | Field | composes | Field | `address` sub-document composes `address.city` |
162
+ | Index | aggregates | Field | `idx_orders_customer_date` aggregates `customer_id` and `created_at` |
163
+ | AccessPattern | accesses | Collection | "list-orders-by-customer" accesses `orders` |
164
+ | AccessPattern | uses | Index | "list-orders-by-customer" uses `idx_orders_customer_date` |
165
+ | AccessPattern | references | Field | "list-orders-by-customer" references `orders.customer_id` |
166
+ | View | derives-from | Collection | `active_users_view` derives from `users` |
167
+ | View | derives-from | View | `quarterly_revenue_mv` derives from `monthly_revenue_mv` |
168
+ | StoredLogic | accesses | Collection | `get_user_stats()` accesses `orders` |
169
+ | StoredLogic | migrates | Collection | `migrate_2024_10_split_address()` migrates `customers` |
170
+ | EventHandler | references | Field | `orders_status_trigger` references `orders.status` (AFTER UPDATE OF) |
171
+ | EventHandler | triggers | StoredLogic | `orders_audit_trigger` triggers `write_audit_row()` |
172
+ | ValidationRule | references | Field | `uq_users_email` references `users.email` |
173
+ | ValidationRule | cascades-to | Collection | `fk_order_items_order` (`ON DELETE CASCADE`) cascades to `order_items` |
174
+ | RetentionPolicy | governs | Collection | "Audit Log Retention" governs `audit_log` |
175
+ | RetentionPolicy | archives-to | Collection | "Audit Log Retention" archives to `audit_log_archive` |
95
176
 
96
- **Incoming (Other Layers → Data Store):**
177
+ ---
97
178
 
98
- - Data Model Layer → Data Store (physical storage mapping)
99
- - Application Layer → Data Store (database connections)
100
- - Technology Layer → Data Store (hosting infrastructure)
179
+ ## Cross-Layer References
180
+
181
+ Cross-layer links are created with `dr relationship add`, not inline YAML attributes.
182
+
183
+ ### Outgoing References (Data Store → Other Layers)
184
+
185
+ | Source Type | Predicate | Target Type | Example |
186
+ | --------------- | ---------- | --------------------------------- | ----------------------------------------------------------------- |
187
+ | Collection | realizes | `business.businessobject` | `orders` table realizes the "Customer Order" business object |
188
+ | Collection | realizes | `security.secureresource` | `patients` collection realizes the "Patient Records" resource |
189
+ | Collection | references | `security.dataclassification` | `payments` collection references the "PCI" classification |
190
+ | Field | references | `security.dataclassification` | `users.email` references the "PII" classification |
191
+ | Field | requires | `security.fieldaccesscontrol` | `customers.ssn` requires the "SSN Masking" field control |
192
+ | Field | maps-to | `api.parameter` | `orders.id` maps to the `{orderId}` path parameter |
193
+ | Database | depends-on | `technology.systemsoftware` | "orders-db" depends on "PostgreSQL 16" |
194
+ | Database | depends-on | `technology.node` | "orders-db" depends on the "db-primary-01" node |
195
+ | Database | satisfies | `security.securitypolicy` | "orders-db" satisfies the "Encryption at Rest" policy |
196
+ | StoredLogic | realizes | `application.applicationfunction` | `calculate_discount()` realizes "Apply Promotions" |
197
+ | EventHandler | triggers | `application.applicationevent` | "orders CDC stream" triggers "Order Placed" |
198
+ | AccessPattern | serves | `application.applicationfunction` | "get-user-by-email" serves "Authenticate User" |
199
+ | View | maps-to | `api.response` | `order_summary_view` maps to the `GET /orders/summary` response |
200
+ | RetentionPolicy | satisfies | `security.retentionpolicy` | "Audit Log Retention" satisfies the "SOC2 Audit Retention" policy |
201
+
202
+ ### Incoming References (Other Layers → Data Store)
203
+
204
+ | Source Type | Predicate | Target Type | Example |
205
+ | ---------------------------------- | --------- | -------------- | ---------------------------------------------------------------- |
206
+ | `application.applicationcomponent` | accesses | Collection | "OrderRepository" accesses `orders` |
207
+ | `application.applicationfunction` | accesses | Collection | "findOrdersByCustomer" accesses `orders` |
208
+ | `application.applicationservice` | accesses | View | "Reporting Service" accesses `monthly_revenue_mv` |
209
+ | `data-model.objectschema` | maps-to | Collection | "User" schema maps to the `users` table |
210
+ | `data-model.schemadefinition` | maps-to | Collection | "AuditEntry" definition maps to `audit_log` |
211
+ | `testing.testcoveragetarget` | covers | StoredLogic | "Discount rules" coverage target covers `calculate_discount()` |
212
+ | `testing.testcasesketch` | tests | ValidationRule | "Reject negative total" sketch tests `chk_orders_total_positive` |
213
+ | `apm.metricinstrument` | monitors | Database | "db.client.connections.usage" monitors "orders-db" |
214
+ | `apm.span` | monitors | Collection | "SELECT orders" span monitors `orders` |
101
215
 
102
216
  ---
103
217
 
@@ -106,7 +220,7 @@ Activate when the user:
106
220
  1. **Paradigm-neutral modeling** — Use `collection`/`field` regardless of whether the underlying store is relational or document
107
221
  2. **Access patterns first** — For NoSQL (DynamoDB, Cassandra), define `AccessPattern` entities before collections
108
222
  3. **Indexes** — Add indexes for frequent query paths; use `AccessPattern` to document which index serves which pattern
109
- 4. **PII marking** — Use `x-pii` on `field` entities to mark sensitive data
223
+ 4. **PII marking** — Link sensitive `field` entities to a security `dataclassification` node via `field.satisfies.security.dataclassification`; note PII status in the field `description`
110
224
  5. **Retention policies** — Always add a `RetentionPolicy` for collections with regulatory or storage requirements
111
225
  6. **Stored logic** — Capture stored procedures, triggers, and UDFs as `StoredLogic` entities
112
226
  7. **Event handlers** — Document CDC (change-data-capture) and event-driven triggers as `EventHandler` entities
@@ -118,28 +232,28 @@ Activate when the user:
118
232
 
119
233
  ```bash
120
234
  # Add a database instance
121
- dr add data-store database --name "users-db"
235
+ dr add data-store database "users-db"
122
236
 
123
237
  # Add a namespace (schema or keyspace)
124
- dr add data-store namespace --name "public" --property parentDatabase=data-store.database.users-db
238
+ dr add data-store namespace "public" --description "Default database namespace"
125
239
 
126
240
  # Add a collection (table or document collection)
127
- dr add data-store collection --name "users" --property parentNamespace=data-store.namespace.public
241
+ dr add data-store collection "users" --description "User records collection"
128
242
 
129
243
  # Add a field to a collection
130
- dr add data-store field --name "email" --property dataType=string --property nullable=false
244
+ dr add data-store field "email" --description "User email address"
131
245
 
132
246
  # Add an index
133
- dr add data-store index --name "idx-users-email" --property fields='["email"]' --property unique=true
247
+ dr add data-store index "idx-users-email" --description "Index on email field"
134
248
 
135
249
  # Add an access pattern (for NoSQL capacity planning)
136
- dr add data-store accesspattern --name "get-user-by-email" --property queryType=point-lookup
250
+ dr add data-store accesspattern "get-user-by-email" --description "Point lookup by email"
137
251
 
138
252
  # List collections
139
- dr list data-store collection
253
+ dr list data-store --type collection
140
254
 
141
255
  # Validate data-store layer
142
- dr validate --layer data-store
256
+ dr validate --layers data-store
143
257
 
144
258
  # Introspect available types
145
259
  dr schema types data-store
@@ -150,58 +264,71 @@ dr schema types data-store
150
264
  ## Example: Users Collection (Paradigm-Neutral)
151
265
 
152
266
  ```yaml
267
+ # Collection — use collectionType to specify the paradigm-specific storage unit
153
268
  id: data-store.collection.users
154
269
  name: "Users Collection"
155
270
  type: collection
271
+ description: "User account records — relational table (PostgreSQL)"
272
+ properties:
273
+ collectionType: TABLE
274
+ partitionKey: "id"
275
+ validationSchema: data-model.object-schema.user
276
+ ```
277
+
278
+ ```yaml
279
+ # Fields are separate data-store.field elements — not nested inside the collection
280
+ id: data-store.field.users-id
281
+ name: "Users ID"
282
+ type: field
283
+ description: "Primary key"
284
+ properties:
285
+ dataType: uuid
286
+ nullable: false
287
+ fieldRole: PARTITION_KEY
288
+
289
+ id: data-store.field.users-email
290
+ name: "Users Email"
291
+ type: field
292
+ description: "User email address — PII"
156
293
  properties:
157
- parentNamespace: data-store.namespace.public
158
- paradigm: relational # or: document, key-value, time-series, graph
159
- fields:
160
- - id:
161
- dataType: uuid
162
- nullable: false
163
- primaryKey: true
164
- - email:
165
- dataType: string
166
- nullable: false
167
- x-pii: true
168
- x-encrypted: true
169
- - username:
170
- dataType: string
171
- nullable: false
172
- - created_at:
173
- dataType: timestamp
174
- nullable: false
175
- x-json-schema: data-model.object-schema.user
176
- x-apm-performance-metrics:
177
- - apm.metric.users-query-latency
294
+ dataType: string
295
+ nullable: false
296
+
297
+ id: data-store.field.users-created-at
298
+ name: "Users Created At"
299
+ type: field
300
+ properties:
301
+ dataType: timestamp
302
+ nullable: false
178
303
  ```
179
304
 
180
- ### Access Pattern (for DynamoDB/NoSQL)
305
+ ### Access Pattern
181
306
 
182
307
  ```yaml
183
308
  id: data-store.accesspattern.get-user-by-email
184
309
  name: "Get User by Email"
185
310
  type: accesspattern
311
+ description: "Point lookup by email — used for login and profile fetch"
186
312
  properties:
187
- collection: data-store.collection.users
188
- queryType: point-lookup
189
- keyAttributes: ["email"]
190
- consistencyLevel: strong
191
- estimatedRps: 500
313
+ patternType: POINT_READ
314
+ targetCollection: data-store.collection.users
315
+ keyCondition: "email"
316
+ consistencyRequirement: STRONG
317
+ expectedFrequency: HIGH_THROUGHPUT
192
318
  ```
193
319
 
194
320
  ### Retention Policy
195
321
 
196
322
  ```yaml
197
- id: data-store.retentionpolicy.users-audit-log
198
- name: "Users Audit Log Retention"
323
+ id: data-store.retentionpolicy.audit-log-retention
324
+ name: "Audit Log Retention"
199
325
  type: retentionpolicy
326
+ description: "365-day retention for regulatory compliance (SOC2, GDPR Article 30)"
200
327
  properties:
201
- collection: data-store.collection.users-audit-log
202
- ttlDays: 365
203
- archiveAfterDays: 90
204
- regulatoryBasis: "SOC2, GDPR Article 30"
328
+ targetCollection: data-store.collection.users-audit-log
329
+ retentionDuration: "P365D"
330
+ action: ARCHIVE
331
+ enabled: true
205
332
  ```
206
333
 
207
334
  ---
@@ -210,7 +337,32 @@ properties:
210
337
 
211
338
  - ❌ Using SQL-only concepts (Table, Column, Constraint) — use paradigm-neutral `collection`, `field`, `validationrule`
212
339
  - ❌ Skipping `AccessPattern` for NoSQL stores (DynamoDB, Cassandra) — define access patterns first
213
- - ❌ Not marking PII fields with `x-pii`
214
- - ❌ Missing cross-layer links to data model layer (`x-json-schema`)
340
+ - ❌ Nesting fields inline inside a collection element — `field` entities are always separate elements linked via `collection.composes.field`
341
+ - ❌ Using invented `x-pii`, `x-json-schema`, or `x-apm-performance-metrics` attributes — these are not in the spec; use relationships (`field satisfies security.dataclassification`, `data-model.objectschema maps-to collection`) instead
342
+ - ❌ Using `ttlDays` / `archiveAfterDays` in retentionpolicy — use `retentionDuration` (ISO 8601, e.g. `"P365D"`) and `action` (enum: DELETE | ARCHIVE | ...)
215
343
  - ❌ Forgetting `RetentionPolicy` for regulated data
216
344
  - ❌ Not documenting `EventHandler` for CDC or change-triggered workflows
345
+
346
+ ---
347
+
348
+ ## Coverage Completeness Checklist
349
+
350
+ Before declaring data-store layer extraction complete, verify each type was considered:
351
+
352
+ - [ ] **database** — Database instance (any paradigm: relational, document, key-value, time-series, graph)
353
+ - [ ] **namespace** — Logical grouping of collections (PostgreSQL schema, Cassandra keyspace, MongoDB database)
354
+ - [ ] **collection** — Primary storage unit (table, document collection, stream, bucket)
355
+ - [ ] **field** — Field or column definition with data type and constraints
356
+ - [ ] **index** — Query optimization index (B-tree, hash, compound, text, geospatial, vector)
357
+ - [ ] **view** — Derived or materialized view over one or more collections
358
+ - [ ] **storedlogic** — Stored procedures, functions, and user-defined aggregates
359
+ - [ ] **validationrule** — Database-level validation constraint or schema enforcement rule
360
+ - [ ] **accesspattern** — Named query access pattern (especially required for NoSQL: DynamoDB, Cassandra, MongoDB)
361
+ - [ ] **eventhandler** — Event-driven trigger or change-data-capture handler
362
+ - [ ] **retentionpolicy** — Data lifecycle, TTL, and retention rule definition
363
+
364
+ If any type has ZERO elements, explicitly decide:
365
+ "This type doesn't apply to this codebase" with reasoning.
366
+
367
+ > **Note:** `accesspattern` is strongly recommended for any NoSQL store (DynamoDB, Cassandra, Firestore) — NoSQL schema design is driven by access patterns.
368
+ > `retentionpolicy` is strongly recommended for any collection subject to regulatory requirements (GDPR, SOC2, HIPAA).