@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.
- package/README.md +46 -16
- package/dist/analysis/relationship-classifier.js +2 -9
- package/dist/analysis/relationship-classifier.js.map +2 -2
- package/dist/analyzers/active-analyzer.js +62 -0
- package/dist/analyzers/active-analyzer.js.map +7 -0
- package/dist/analyzers/call-graph-utils.js +2 -2
- package/dist/analyzers/call-graph-utils.js.map +2 -2
- package/dist/analyzers/cards/build.js +191 -0
- package/dist/analyzers/cards/build.js.map +7 -0
- package/dist/analyzers/cards/classify.js +42 -0
- package/dist/analyzers/cards/classify.js.map +7 -0
- package/dist/analyzers/cards/edge-index.js +44 -0
- package/dist/analyzers/cards/edge-index.js.map +7 -0
- package/dist/analyzers/cards/extract.js +138 -0
- package/dist/analyzers/cards/extract.js.map +7 -0
- package/dist/analyzers/cards/facts.js +46 -0
- package/dist/analyzers/cards/facts.js.map +7 -0
- package/dist/analyzers/cards/graph.js +42 -0
- package/dist/analyzers/cards/graph.js.map +7 -0
- package/dist/analyzers/cards/index.js +8 -0
- package/dist/analyzers/cards/index.js.map +7 -0
- package/dist/analyzers/cards/routes.js +96 -0
- package/dist/analyzers/cards/routes.js.map +7 -0
- package/dist/analyzers/cards/tier0.js +18 -0
- package/dist/analyzers/cards/tier0.js.map +7 -0
- package/dist/analyzers/cards/types.js +1 -0
- package/dist/analyzers/cards/types.js.map +7 -0
- package/dist/analyzers/cbm-analyzer.js +270 -174
- package/dist/analyzers/cbm-analyzer.js.map +2 -2
- package/dist/analyzers/cbm-responses.js +342 -0
- package/dist/analyzers/cbm-responses.js.map +7 -0
- package/dist/analyzers/code-changes.js +159 -0
- package/dist/analyzers/code-changes.js.map +7 -0
- package/dist/analyzers/edge-relationships.js +49 -0
- package/dist/analyzers/edge-relationships.js.map +7 -0
- package/dist/analyzers/extraction-plan.js +541 -0
- package/dist/analyzers/extraction-plan.js.map +7 -0
- package/dist/analyzers/index-job.js +229 -0
- package/dist/analyzers/index-job.js.map +7 -0
- package/dist/analyzers/mapping-loader.js +9 -0
- package/dist/analyzers/mapping-loader.js.map +2 -2
- package/dist/analyzers/tier0-rules.js +153 -0
- package/dist/analyzers/tier0-rules.js.map +7 -0
- package/dist/analyzers/types.js.map +1 -1
- package/dist/audit/relationships/ai/prompts.js +10 -10
- package/dist/audit/relationships/ai/prompts.js.map +2 -2
- package/dist/audit/relationships/analysis/layer-templates.js +52 -52
- package/dist/audit/relationships/analysis/layer-templates.js.map +1 -1
- package/dist/cli.js +23 -11
- package/dist/cli.js.map +2 -2
- package/dist/coding-agents/default-permissions.js +31 -1
- package/dist/coding-agents/default-permissions.js.map +2 -2
- package/dist/coding-agents/drbot-mcp.js +269 -0
- package/dist/coding-agents/drbot-mcp.js.map +7 -0
- package/dist/commands/add.js +7 -4
- package/dist/commands/add.js.map +2 -2
- package/dist/commands/analyzer.js +143 -40
- package/dist/commands/analyzer.js.map +2 -2
- package/dist/commands/changeset-verify.js +63 -0
- package/dist/commands/changeset-verify.js.map +7 -0
- package/dist/commands/changeset.js +80 -29
- package/dist/commands/changeset.js.map +2 -2
- package/dist/commands/delete.js +10 -4
- package/dist/commands/delete.js.map +2 -2
- package/dist/commands/farm.js +176 -60
- package/dist/commands/farm.js.map +2 -2
- package/dist/commands/init.js +9 -26
- package/dist/commands/init.js.map +2 -2
- package/dist/commands/mcp.js +40 -21
- package/dist/commands/mcp.js.map +3 -3
- package/dist/commands/relationship.js +208 -37
- package/dist/commands/relationship.js.map +2 -2
- package/dist/commands/reports.js +3 -3
- package/dist/commands/reports.js.map +2 -2
- package/dist/commands/update.js +52 -32
- package/dist/commands/update.js.map +2 -2
- package/dist/commands/upgrade.js +99 -103
- package/dist/commands/upgrade.js.map +3 -3
- package/dist/commands/validate.js +19 -3
- package/dist/commands/validate.js.map +2 -2
- package/dist/commands/version.js +1 -1
- package/dist/commands/visualize.js +34 -15
- package/dist/commands/visualize.js.map +2 -2
- package/dist/core/annotation-store.js +15 -5
- package/dist/core/annotation-store.js.map +2 -2
- package/dist/core/catalog-migration.js +34 -0
- package/dist/core/catalog-migration.js.map +7 -0
- package/dist/core/changeset-analysis.js +421 -0
- package/dist/core/changeset-analysis.js.map +7 -0
- package/dist/core/changeset-base-index.js +160 -0
- package/dist/core/changeset-base-index.js.map +7 -0
- package/dist/core/changeset-brief-compact.js +256 -0
- package/dist/core/changeset-brief-compact.js.map +7 -0
- package/dist/core/changeset-brief-delta.js +102 -0
- package/dist/core/changeset-brief-delta.js.map +7 -0
- package/dist/core/changeset-graph.js +281 -0
- package/dist/core/changeset-graph.js.map +7 -0
- package/dist/core/changeset-only-guard.js +32 -0
- package/dist/core/changeset-only-guard.js.map +7 -0
- package/dist/core/changeset-summary.js +68 -0
- package/dist/core/changeset-summary.js.map +7 -0
- package/dist/core/changeset-validator.js +66 -20
- package/dist/core/changeset-validator.js.map +2 -2
- package/dist/core/changeset-verify.js +848 -0
- package/dist/core/changeset-verify.js.map +7 -0
- package/dist/core/changeset.js +56 -9
- package/dist/core/changeset.js.map +2 -2
- package/dist/core/element-type-migration.js +145 -0
- package/dist/core/element-type-migration.js.map +7 -0
- package/dist/core/extraction-observability.js +161 -0
- package/dist/core/extraction-observability.js.map +7 -0
- package/dist/core/farm-manifest.js +12 -6
- package/dist/core/farm-manifest.js.map +2 -2
- package/dist/core/farm-sync-engine.js +1 -1
- package/dist/core/farm-sync-engine.js.map +2 -2
- package/dist/core/farm-sync-state.js +10 -2
- package/dist/core/farm-sync-state.js.map +2 -2
- package/dist/core/migration-registry.js +88 -47
- package/dist/core/migration-registry.js.map +2 -2
- package/dist/core/model-upgrade.js +102 -0
- package/dist/core/model-upgrade.js.map +7 -0
- package/dist/core/model.js +82 -30
- package/dist/core/model.js.map +2 -2
- package/dist/core/mutation-handler.js +71 -6
- package/dist/core/mutation-handler.js.map +2 -2
- package/dist/core/project-init.js +53 -0
- package/dist/core/project-init.js.map +7 -0
- package/dist/core/relationship-migration-table.js +6639 -0
- package/dist/core/relationship-migration-table.js.map +7 -0
- package/dist/core/relationship-migration.js +272 -0
- package/dist/core/relationship-migration.js.map +7 -0
- package/dist/core/relationship-prune.js +49 -0
- package/dist/core/relationship-prune.js.map +7 -0
- package/dist/core/relationship-staging.js +161 -0
- package/dist/core/relationship-staging.js.map +7 -0
- package/dist/core/relationships.js +26 -4
- package/dist/core/relationships.js.map +2 -2
- package/dist/core/report-data-model.js +7 -13
- package/dist/core/report-data-model.js.map +2 -2
- package/dist/core/staged-changeset-storage.js +145 -18
- package/dist/core/staged-changeset-storage.js.map +2 -2
- package/dist/core/staged-source-reference.js +28 -0
- package/dist/core/staged-source-reference.js.map +7 -0
- package/dist/core/staging-area.js +166 -24
- package/dist/core/staging-area.js.map +2 -2
- package/dist/core/upgrade-plan.js +117 -0
- package/dist/core/upgrade-plan.js.map +7 -0
- package/dist/core/virtual-projection.js +13 -5
- package/dist/core/virtual-projection.js.map +2 -2
- package/dist/export/archimate-exporter.js +1 -0
- package/dist/export/archimate-exporter.js.map +2 -2
- package/dist/generated/compiled-validators.js +2 -2
- package/dist/generated/compiled-validators.js.map +2 -2
- package/dist/generated/layer-registry.js +16 -16
- package/dist/generated/layer-registry.js.map +2 -2
- package/dist/generated/node-types.js +186 -168
- package/dist/generated/node-types.js.map +2 -2
- package/dist/generated/relationship-index.js +2468 -7913
- package/dist/generated/relationship-index.js.map +2 -2
- package/dist/integrations/claude_code/.claude-plugin/plugin.json +24 -0
- package/dist/integrations/claude_code/agents/dr-architect.md +30 -3
- package/dist/integrations/claude_code/agents/dr-extractor.md +8 -2
- package/dist/integrations/claude_code/commands/dr-analyzer.md +565 -0
- package/dist/integrations/claude_code/commands/dr-changeset.md +2 -1
- package/dist/integrations/claude_code/commands/dr-map.md +20 -1
- package/dist/integrations/claude_code/commands/dr-plan.md +66 -0
- package/dist/integrations/claude_code/commands/dr-relate.md +106 -96
- package/dist/integrations/claude_code/commands/dr-verify.md +45 -2
- package/dist/integrations/claude_code/docs/END_TO_END_WALKTHROUGH.md +14 -0
- package/dist/integrations/claude_code/docs/MCP_SERVER.md +47 -26
- package/dist/integrations/claude_code/docs/QUICK_START.md +37 -8
- package/dist/integrations/claude_code/docs/README.md +68 -2
- package/dist/integrations/claude_code/plugin-agents/dr-advisor.md +255 -0
- package/dist/integrations/claude_code/plugin-agents/dr-architect.md +306 -0
- package/dist/integrations/claude_code/skills/dr_01_motivation_layer/SKILL.md +93 -72
- package/dist/integrations/claude_code/skills/dr_02_business_layer/SKILL.md +163 -126
- package/dist/integrations/claude_code/skills/dr_03_product_layer/SKILL.md +161 -126
- package/dist/integrations/claude_code/skills/dr_04_security_layer/SKILL.md +153 -133
- package/dist/integrations/claude_code/skills/dr_05_application_layer/SKILL.md +129 -100
- package/dist/integrations/claude_code/skills/dr_06_technology_layer/SKILL.md +111 -94
- package/dist/integrations/claude_code/skills/dr_07_api_layer/SKILL.md +143 -157
- package/dist/integrations/claude_code/skills/dr_08_data_model_layer/SKILL.md +117 -33
- package/dist/integrations/claude_code/skills/dr_09_dataset_layer/SKILL.md +74 -25
- package/dist/integrations/claude_code/skills/dr_10_ux_layer/SKILL.md +88 -12
- package/dist/integrations/claude_code/skills/dr_11_navigation_layer/SKILL.md +83 -24
- package/dist/integrations/claude_code/skills/dr_12_apm_layer/SKILL.md +57 -12
- package/dist/integrations/claude_code/skills/dr_13_testing_layer/SKILL.md +95 -15
- package/dist/integrations/claude_code/skills/dr_change_planning/SKILL.md +178 -0
- package/dist/integrations/claude_code/skills/dr_changeset_reviewer/SKILL.md +8 -0
- package/dist/integrations/claude_code/skills/dr_engineering_guide/SKILL.md +6 -1
- package/dist/integrations/github_copilot/agents/dr-architect.md +3 -1
- package/dist/integrations/github_copilot/skills/dr_01_motivation_layer/SKILL.md +182 -102
- package/dist/integrations/github_copilot/skills/dr_02_business_layer/SKILL.md +266 -148
- package/dist/integrations/github_copilot/skills/dr_03_product_layer/SKILL.md +547 -86
- package/dist/integrations/github_copilot/skills/dr_04_security_layer/SKILL.md +164 -169
- package/dist/integrations/github_copilot/skills/dr_05_application_layer/SKILL.md +420 -150
- package/dist/integrations/github_copilot/skills/dr_06_technology_layer/SKILL.md +331 -138
- package/dist/integrations/github_copilot/skills/dr_07_api_layer/SKILL.md +265 -201
- package/dist/integrations/github_copilot/skills/dr_08_data_model_layer/SKILL.md +181 -58
- package/dist/integrations/github_copilot/skills/dr_09_dataset_layer/SKILL.md +209 -57
- package/dist/integrations/github_copilot/skills/dr_10_ux_layer/SKILL.md +277 -112
- package/dist/integrations/github_copilot/skills/dr_11_navigation_layer/SKILL.md +219 -70
- package/dist/integrations/github_copilot/skills/dr_12_apm_layer/SKILL.md +189 -105
- package/dist/integrations/github_copilot/skills/dr_13_testing_layer/SKILL.md +225 -102
- package/dist/integrations/github_copilot/skills/dr_change_planning/SKILL.md +177 -0
- package/dist/integrations/github_copilot/skills/dr_changeset_reviewer/SKILL.md +3 -0
- package/dist/integrations/hash-utils.js.map +2 -2
- package/dist/mcp/api-key-manager.js +14 -1
- package/dist/mcp/api-key-manager.js.map +2 -2
- package/dist/mcp/changeset-only.js +45 -0
- package/dist/mcp/changeset-only.js.map +7 -0
- package/dist/mcp/project-root.js +85 -0
- package/dist/mcp/project-root.js.map +7 -0
- package/dist/mcp/server-instructions.js +27 -0
- package/dist/mcp/server-instructions.js.map +7 -0
- package/dist/mcp/strict-schema.js +52 -0
- package/dist/mcp/strict-schema.js.map +7 -0
- package/dist/mcp/tool-registry.js +55 -5
- package/dist/mcp/tool-registry.js.map +2 -2
- package/dist/mcp/tools/changeset-analysis-tools.js +98 -0
- package/dist/mcp/tools/changeset-analysis-tools.js.map +7 -0
- package/dist/mcp/tools/changeset-commit.js +224 -0
- package/dist/mcp/tools/changeset-commit.js.map +7 -0
- package/dist/mcp/tools/changeset-editing.js +260 -0
- package/dist/mcp/tools/changeset-editing.js.map +7 -0
- package/dist/mcp/tools/changeset-lifecycle.js +83 -0
- package/dist/mcp/tools/changeset-lifecycle.js.map +7 -0
- package/dist/mcp/tools/changeset-shared.js +31 -0
- package/dist/mcp/tools/changeset-shared.js.map +7 -0
- package/dist/mcp/tools/changeset-show.js +17 -1
- package/dist/mcp/tools/changeset-show.js.map +2 -2
- package/dist/mcp/tools/changeset-verify.js +49 -0
- package/dist/mcp/tools/changeset-verify.js.map +7 -0
- package/dist/mcp/tools/codebase-extract.js +836 -0
- package/dist/mcp/tools/codebase-extract.js.map +7 -0
- package/dist/mcp/tools/codebase-index.js +125 -0
- package/dist/mcp/tools/codebase-index.js.map +7 -0
- package/dist/mcp/tools/codebase-shared.js +265 -0
- package/dist/mcp/tools/codebase-shared.js.map +7 -0
- package/dist/mcp/tools/codebase-verify.js +48 -0
- package/dist/mcp/tools/codebase-verify.js.map +7 -0
- package/dist/mcp/tools/index.js +34 -1
- package/dist/mcp/tools/index.js.map +2 -2
- package/dist/mcp/tools/model-add.js +191 -74
- package/dist/mcp/tools/model-add.js.map +2 -2
- package/dist/mcp/tools/model-delete.js +2 -2
- package/dist/mcp/tools/model-delete.js.map +2 -2
- package/dist/mcp/tools/model-search.js +14 -0
- package/dist/mcp/tools/model-search.js.map +2 -2
- package/dist/mcp/tools/model-show.js +29 -2
- package/dist/mcp/tools/model-show.js.map +2 -2
- package/dist/mcp/tools/model-trace.js +93 -30
- package/dist/mcp/tools/model-trace.js.map +2 -2
- package/dist/mcp/tools/model-update.js +46 -26
- package/dist/mcp/tools/model-update.js.map +2 -2
- package/dist/mcp/tools/model-validate.js +46 -4
- package/dist/mcp/tools/model-validate.js.map +2 -2
- package/dist/mcp/tools/project-status-collectors.js +381 -0
- package/dist/mcp/tools/project-status-collectors.js.map +7 -0
- package/dist/mcp/tools/project-status.js +237 -0
- package/dist/mcp/tools/project-status.js.map +7 -0
- package/dist/mcp/tools/project-tools.js +505 -0
- package/dist/mcp/tools/project-tools.js.map +7 -0
- package/dist/mcp/tools/relationship-tools.js +167 -0
- package/dist/mcp/tools/relationship-tools.js.map +7 -0
- package/dist/mcp/tools/review-open.js +210 -0
- package/dist/mcp/tools/review-open.js.map +7 -0
- package/dist/mcp/tools/shared.js +35 -4
- package/dist/mcp/tools/shared.js.map +2 -2
- package/dist/mcp/tools/spec-type.js +90 -0
- package/dist/mcp/tools/spec-type.js.map +7 -0
- package/dist/reports/model-report-orchestrator.js +31 -2
- package/dist/reports/model-report-orchestrator.js.map +2 -2
- package/dist/schemas/bundled/analyzers/cbm.json +1200 -70
- package/dist/schemas/bundled/analyzers/manifest.json +2 -2
- package/dist/schemas/bundled/api.json +1029 -1658
- package/dist/schemas/bundled/apm.json +499 -734
- package/dist/schemas/bundled/application.json +735 -371
- package/dist/schemas/bundled/base.json +3 -220
- package/dist/schemas/bundled/business.json +452 -366
- package/dist/schemas/bundled/data-model.json +395 -411
- package/dist/schemas/bundled/data-store.json +334 -558
- package/dist/schemas/bundled/manifest.json +18 -18
- package/dist/schemas/bundled/motivation.json +349 -368
- package/dist/schemas/bundled/navigation.json +415 -731
- package/dist/schemas/bundled/product.json +325 -159
- package/dist/schemas/bundled/security.json +864 -1232
- package/dist/schemas/bundled/technology.json +574 -703
- package/dist/schemas/bundled/testing.json +865 -1646
- package/dist/schemas/bundled/ux.json +739 -1352
- package/dist/server/schemas.js +8 -0
- package/dist/server/schemas.js.map +2 -2
- package/dist/server/server.js +686 -231
- package/dist/server/server.js.map +3 -3
- package/dist/server/viewer-registry.js +264 -0
- package/dist/server/viewer-registry.js.map +7 -0
- package/dist/server-entry.js +2 -1
- package/dist/server-entry.js.map +2 -2
- package/dist/telemetry/index.js +1 -1
- package/dist/utils/ansi-suppressor.js +6 -8
- package/dist/utils/ansi-suppressor.js.map +2 -2
- package/dist/utils/attribute-patch.js +41 -0
- package/dist/utils/attribute-patch.js.map +7 -0
- package/dist/utils/error-hints.js +29 -0
- package/dist/utils/error-hints.js.map +7 -0
- package/dist/utils/errors.js +9 -3
- package/dist/utils/errors.js.map +2 -2
- package/dist/utils/id-generator.js +5 -2
- package/dist/utils/id-generator.js.map +2 -2
- package/dist/utils/project-paths.js +26 -1
- package/dist/utils/project-paths.js.map +2 -2
- package/dist/utils/source-reference.js +64 -31
- package/dist/utils/source-reference.js.map +2 -2
- package/dist/utils/spec-version.js +2 -2
- package/dist/utils/spec-version.js.map +1 -1
- package/dist/validators/composed-reference-validator.js +5 -27
- package/dist/validators/composed-reference-validator.js.map +2 -2
- package/dist/validators/model-warnings.js +28 -0
- package/dist/validators/model-warnings.js.map +7 -0
- package/dist/validators/reference-validator.js +0 -7
- package/dist/validators/reference-validator.js.map +2 -2
- package/dist/validators/relationship-schema-validator.js +3 -3
- package/dist/validators/relationship-schema-validator.js.map +2 -2
- package/dist/validators/schema-validator.js +27 -9
- package/dist/validators/schema-validator.js.map +2 -2
- package/dist/validators/types.js.map +1 -1
- package/dist/viewer/README.md +6 -6
- package/dist/viewer/assets/main-CUOQGGRA.css +1 -0
- package/dist/viewer/assets/main-DvH3gYrI.js +84 -0
- package/dist/viewer/index.html +2 -2
- package/dist/viewer/manifest.json +10 -10
- package/dist/viewer/version.json +1 -1
- package/package.json +2 -1
- package/dist/viewer/assets/main-B7AOQXXX.js +0 -81
- 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.
|
|
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.
|
|
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
|
-
##
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
177
|
+
---
|
|
97
178
|
|
|
98
|
-
-
|
|
99
|
-
|
|
100
|
-
-
|
|
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** —
|
|
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
|
|
235
|
+
dr add data-store database "users-db"
|
|
122
236
|
|
|
123
237
|
# Add a namespace (schema or keyspace)
|
|
124
|
-
dr add data-store namespace
|
|
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
|
|
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
|
|
244
|
+
dr add data-store field "email" --description "User email address"
|
|
131
245
|
|
|
132
246
|
# Add an index
|
|
133
|
-
dr add data-store index
|
|
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
|
|
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 --
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
|
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
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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.
|
|
198
|
-
name: "
|
|
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
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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
|
-
- ❌
|
|
214
|
-
- ❌
|
|
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).
|