@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/generated/compiled-validators.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * GENERATED FILE - DO NOT EDIT\n * This file is automatically generated by scripts/generate-validators.ts\n * during the build process. Changes will be overwritten.\n *\n * Pre-compiled AJV validators for base schemas\n * Eliminates runtime schema loading overhead by baking validators into the bundle\n *\n * Source: cli/src/schemas/bundled/base/\n * Build-time generation prevents runtime file I/O and schema compilation\n */\n\nimport Ajv from \"ajv\";\nimport { ValidateFunction } from \"ajv\";\nimport addFormats from \"ajv-formats\";\n\n\n// Shared AJV instance for all validators to handle schema references\nconst sharedAjv = (() => {\n const ajv = new Ajv({\n allErrors: true,\n strict: false,\n validateFormats: true,\n });\n addFormats(ajv);\n\n // Register all base schemas for reference resolution\n ajv.addSchema({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"SpecNode\",\"description\":\"Base schema for all spec node types. Each node type schema extends this with type-specific attribute constraints via allOf.\",\"type\":\"object\",\"required\":[\"id\",\"path\",\"spec_node_id\",\"type\",\"name\"],\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\",\"format\":\"uuid\",\"description\":\"Unique node instance identifier (UUIDv4). Globally unique across the entire model.\",\"examples\":[\"550e8400-e29b-41d4-a716-446655440000\"]},\"path\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*\\\\.[a-z][a-z0-9-]*\\\\.[a-z][a-z0-9-]*$\",\"description\":\"Human-readable element path in format {layer}.{type}.{name} (e.g., 'motivation.goal.increase-revenue')\"},\"spec_node_id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z][a-z0-9-]*$\",\"description\":\"Reference to the spec node type that this node conforms to (e.g., 'motivation.goal')\"},\"type\":{\"type\":\"string\",\"description\":\"Denormalized node type for efficient filtering and queries. Extracted from spec_node_id (the part after the dot).\",\"examples\":[\"goal\",\"requirement\",\"endpoint\",\"table\"]},\"layer_id\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*$\",\"description\":\"Denormalized layer ID for efficient layer-scoped queries. Extracted from spec_node_id (the part before the dot).\"},\"name\":{\"type\":\"string\",\"description\":\"Human-readable instance name\",\"examples\":[\"Improve Customer Satisfaction\",\"User Login API\",\"Customer Table\"]},\"description\":{\"type\":\"string\",\"description\":\"Optional detailed description of this specific node instance\"},\"attributes\":{\"type\":\"object\",\"description\":\"Attribute values for this node instance. Keys must correspond to attributes defined in the per-type schema, and values must conform to the type constraints.\"},\"source_reference\":{\"$ref\":\"urn:dr:spec:base:source-references#/definitions/SourceReference\",\"description\":\"Optional provenance tracking linking this node to source code locations\"},\"metadata\":{\"type\":\"object\",\"description\":\"Optional metadata about the lifecycle and version of this node instance\",\"additionalProperties\":false,\"properties\":{\"created_at\":{\"type\":\"string\",\"format\":\"date-time\",\"description\":\"ISO 8601 timestamp when this node was created\"},\"updated_at\":{\"type\":\"string\",\"format\":\"date-time\",\"description\":\"ISO 8601 timestamp of the last modification\"},\"created_by\":{\"type\":\"string\",\"description\":\"User or system that created this node\"},\"version\":{\"type\":\"integer\",\"minimum\":1,\"description\":\"Version number of this node (incremented on updates)\"}}}}}, \"urn:dr:spec:base:spec-node\");\n ajv.addSchema({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"SpecNodeRelationship\",\"description\":\"Base type for relationship type definitions in the specification. Defines valid relationships between node types, including cardinality, strength, and semantic properties.\",\"type\":\"object\",\"required\":[\"id\",\"source_spec_node_id\",\"destination_spec_node_id\",\"predicate\"],\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z-]+\\\\.[a-z-]+$\",\"description\":\"Unique relationship ID in format: {source-layer}.{predicate}.{dest-layer}. All components use lowercase with hyphens.\",\"examples\":[\"motivation.supports.motivation\",\"motivation.realizes.business\",\"api.exposes.data-model\"]},\"source_spec_node_id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z][a-z0-9-]*$\",\"description\":\"SpecNode ID that can serve as the source of this relationship type\"},\"source_layer\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*$\",\"description\":\"Denormalized layer ID extracted from source_spec_node_id for efficient queries\"},\"destination_spec_node_id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z][a-z0-9-]*$\",\"description\":\"SpecNode ID that can serve as the destination of this relationship type\"},\"destination_layer\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*$\",\"description\":\"Denormalized layer ID extracted from destination_spec_node_id for efficient queries\"},\"predicate\":{\"type\":\"string\",\"description\":\"Semantic predicate from PredicateCatalog describing the relationship type. Must be a valid predicate name.\",\"examples\":[\"supports\",\"realizes\",\"fulfills\",\"implements\",\"uses\",\"consumes\"]},\"cardinality\":{\"type\":\"string\",\"enum\":[\"one-to-one\",\"one-to-many\",\"many-to-one\",\"many-to-many\"],\"description\":\"Multiplicity constraint on this relationship type. Defines how many source nodes can relate to how many destination nodes.\",\"default\":\"many-to-many\"},\"strength\":{\"type\":\"string\",\"enum\":[\"critical\",\"high\",\"medium\",\"low\"],\"description\":\"Typical importance or strength of this relationship type\",\"default\":\"medium\"},\"required\":{\"type\":\"boolean\",\"description\":\"Whether instances of the source node type must have at least one relationship of this type\",\"default\":false},\"attributes\":{\"type\":\"object\",\"description\":\"Optional schema defining attributes that can appear on relationship instances of this type\",\"additionalProperties\":{\"$ref\":\"urn:dr:spec:base:attribute-spec#/definitions/AttributeSpec\"},\"minProperties\":0,\"examples\":[{\"reason\":{\"type\":\"string\",\"description\":\"Explanation for why this relationship exists\"},\"strength_override\":{\"type\":\"enum\",\"enum_values\":[\"critical\",\"high\",\"medium\",\"low\"],\"description\":\"Instance-specific strength override\"}}]}}}, \"urn:dr:spec:base:spec-node-relationship\");\n ajv.addSchema({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"Source Code Reference Definitions\",\"description\":\"Reusable JSON Schema definitions for linking architecture elements to source code locations\",\"version\":\"1.0.0\",\"definitions\":{\"ProvenanceType\":{\"type\":\"string\",\"enum\":[\"extracted\",\"manual\",\"inferred\",\"generated\"],\"description\":\"How this reference was created: extracted (automated ingestion), manual (human added), inferred (pattern matching), generated (code generated from model)\"},\"SourceLocation\":{\"type\":\"object\",\"description\":\"A specific location in source code, identified by file path and optional symbol\",\"required\":[\"file\"],\"properties\":{\"file\":{\"type\":\"string\",\"minLength\":1,\"description\":\"File path relative to repository root\"},\"symbol\":{\"type\":\"string\",\"description\":\"Named code element (e.g., ClassName.methodName, function_name)\"}}},\"RepositoryContext\":{\"type\":\"object\",\"description\":\"Repository context for the source reference\",\"properties\":{\"url\":{\"type\":\"string\",\"format\":\"uri\",\"description\":\"Git remote URL (HTTPS or SSH format)\"},\"commit\":{\"type\":\"string\",\"pattern\":\"^[0-9a-f]{40}$\",\"description\":\"Full 40-character Git commit SHA\"}}},\"SourceReference\":{\"type\":\"object\",\"description\":\"Links entity to source code location(s) with provenance tracking. For inferred or generated elements, locations may be omitted when no source file exists yet.\",\"required\":[\"provenance\"],\"properties\":{\"provenance\":{\"$ref\":\"#/definitions/ProvenanceType\"},\"locations\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/SourceLocation\"},\"description\":\"One or more source code locations. Required for extracted and manual provenance; optional for inferred and generated.\"},\"repository\":{\"$ref\":\"#/definitions/RepositoryContext\"}}}}}, \"urn:dr:spec:base:source-references\");\n ajv.addSchema({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"AttributeSpec Definitions\",\"description\":\"Reusable definition for attribute specifications used in spec-level schemas (e.g., spec-node-relationship attributes)\",\"definitions\":{\"AttributeSpec\":{\"type\":\"object\",\"title\":\"AttributeSpec\",\"description\":\"Specification for a single attribute that can appear on node or relationship instances\",\"required\":[\"type\",\"description\"],\"additionalProperties\":false,\"properties\":{\"type\":{\"type\":\"string\",\"enum\":[\"string\",\"integer\",\"number\",\"boolean\",\"array\",\"object\",\"enum\"],\"description\":\"The JSON type of this attribute\"},\"description\":{\"type\":\"string\",\"description\":\"Human-readable description of this attribute's purpose\"},\"enum_values\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"Required when type is 'enum'. Lists the valid string values for this attribute.\",\"examples\":[[\"high\",\"medium\",\"low\"],[\"active\",\"inactive\",\"archived\"]]},\"format\":{\"type\":\"string\",\"description\":\"Optional format constraint for string types (e.g., 'email', 'uri', 'date-time')\",\"examples\":[\"email\",\"uri\",\"date-time\",\"uuid\"]},\"default\":{\"description\":\"Default value for this attribute when not provided on a node instance. Can be any JSON value.\"}},\"if\":{\"properties\":{\"type\":{\"const\":\"enum\"}},\"required\":[\"type\"]},\"then\":{\"required\":[\"type\",\"description\",\"enum_values\"]}}}}, \"urn:dr:spec:base:attribute-spec\");\n\n return ajv;\n})();\n\n/**\n * Pre-compiled validator for SpecNode\n * Compiled once at module load, pre-cached for use throughout runtime\n */\nexport const validateSpecNode: ValidateFunction = sharedAjv.compile({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"SpecNode\",\"description\":\"Base schema for all spec node types. Each node type schema extends this with type-specific attribute constraints via allOf.\",\"type\":\"object\",\"required\":[\"id\",\"path\",\"spec_node_id\",\"type\",\"name\"],\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\",\"format\":\"uuid\",\"description\":\"Unique node instance identifier (UUIDv4). Globally unique across the entire model.\",\"examples\":[\"550e8400-e29b-41d4-a716-446655440000\"]},\"path\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*\\\\.[a-z][a-z0-9-]*\\\\.[a-z][a-z0-9-]*$\",\"description\":\"Human-readable element path in format {layer}.{type}.{name} (e.g., 'motivation.goal.increase-revenue')\"},\"spec_node_id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z][a-z0-9-]*$\",\"description\":\"Reference to the spec node type that this node conforms to (e.g., 'motivation.goal')\"},\"type\":{\"type\":\"string\",\"description\":\"Denormalized node type for efficient filtering and queries. Extracted from spec_node_id (the part after the dot).\",\"examples\":[\"goal\",\"requirement\",\"endpoint\",\"table\"]},\"layer_id\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*$\",\"description\":\"Denormalized layer ID for efficient layer-scoped queries. Extracted from spec_node_id (the part before the dot).\"},\"name\":{\"type\":\"string\",\"description\":\"Human-readable instance name\",\"examples\":[\"Improve Customer Satisfaction\",\"User Login API\",\"Customer Table\"]},\"description\":{\"type\":\"string\",\"description\":\"Optional detailed description of this specific node instance\"},\"attributes\":{\"type\":\"object\",\"description\":\"Attribute values for this node instance. Keys must correspond to attributes defined in the per-type schema, and values must conform to the type constraints.\"},\"source_reference\":{\"$ref\":\"urn:dr:spec:base:source-references#/definitions/SourceReference\",\"description\":\"Optional provenance tracking linking this node to source code locations\"},\"metadata\":{\"type\":\"object\",\"description\":\"Optional metadata about the lifecycle and version of this node instance\",\"additionalProperties\":false,\"properties\":{\"created_at\":{\"type\":\"string\",\"format\":\"date-time\",\"description\":\"ISO 8601 timestamp when this node was created\"},\"updated_at\":{\"type\":\"string\",\"format\":\"date-time\",\"description\":\"ISO 8601 timestamp of the last modification\"},\"created_by\":{\"type\":\"string\",\"description\":\"User or system that created this node\"},\"version\":{\"type\":\"integer\",\"minimum\":1,\"description\":\"Version number of this node (incremented on updates)\"}}}}});\n/**\n * Pre-compiled validator for SpecNodeRelationship\n * Compiled once at module load, pre-cached for use throughout runtime\n */\nexport const validateSpecNodeRelationship: ValidateFunction = sharedAjv.compile({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"SpecNodeRelationship\",\"description\":\"Base type for relationship type definitions in the specification. Defines valid relationships between node types, including cardinality, strength, and semantic properties.\",\"type\":\"object\",\"required\":[\"id\",\"source_spec_node_id\",\"destination_spec_node_id\",\"predicate\"],\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z-]+\\\\.[a-z-]+$\",\"description\":\"Unique relationship ID in format: {source-layer}.{predicate}.{dest-layer}. All components use lowercase with hyphens.\",\"examples\":[\"motivation.supports.motivation\",\"motivation.realizes.business\",\"api.exposes.data-model\"]},\"source_spec_node_id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z][a-z0-9-]*$\",\"description\":\"SpecNode ID that can serve as the source of this relationship type\"},\"source_layer\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*$\",\"description\":\"Denormalized layer ID extracted from source_spec_node_id for efficient queries\"},\"destination_spec_node_id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z][a-z0-9-]*$\",\"description\":\"SpecNode ID that can serve as the destination of this relationship type\"},\"destination_layer\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*$\",\"description\":\"Denormalized layer ID extracted from destination_spec_node_id for efficient queries\"},\"predicate\":{\"type\":\"string\",\"description\":\"Semantic predicate from PredicateCatalog describing the relationship type. Must be a valid predicate name.\",\"examples\":[\"supports\",\"realizes\",\"fulfills\",\"implements\",\"uses\",\"consumes\"]},\"cardinality\":{\"type\":\"string\",\"enum\":[\"one-to-one\",\"one-to-many\",\"many-to-one\",\"many-to-many\"],\"description\":\"Multiplicity constraint on this relationship type. Defines how many source nodes can relate to how many destination nodes.\",\"default\":\"many-to-many\"},\"strength\":{\"type\":\"string\",\"enum\":[\"critical\",\"high\",\"medium\",\"low\"],\"description\":\"Typical importance or strength of this relationship type\",\"default\":\"medium\"},\"required\":{\"type\":\"boolean\",\"description\":\"Whether instances of the source node type must have at least one relationship of this type\",\"default\":false},\"attributes\":{\"type\":\"object\",\"description\":\"Optional schema defining attributes that can appear on relationship instances of this type\",\"additionalProperties\":{\"$ref\":\"urn:dr:spec:base:attribute-spec#/definitions/AttributeSpec\"},\"minProperties\":0,\"examples\":[{\"reason\":{\"type\":\"string\",\"description\":\"Explanation for why this relationship exists\"},\"strength_override\":{\"type\":\"enum\",\"enum_values\":[\"critical\",\"high\",\"medium\",\"low\"],\"description\":\"Instance-specific strength override\"}}]}}});\n/**\n * Pre-compiled validator for Source Code Reference Definitions\n * Compiled once at module load, pre-cached for use throughout runtime\n */\nexport const validateSourceReference: ValidateFunction = sharedAjv.compile({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"Source Code Reference Definitions\",\"description\":\"Reusable JSON Schema definitions for linking architecture elements to source code locations\",\"version\":\"1.0.0\",\"definitions\":{\"ProvenanceType\":{\"type\":\"string\",\"enum\":[\"extracted\",\"manual\",\"inferred\",\"generated\"],\"description\":\"How this reference was created: extracted (automated ingestion), manual (human added), inferred (pattern matching), generated (code generated from model)\"},\"SourceLocation\":{\"type\":\"object\",\"description\":\"A specific location in source code, identified by file path and optional symbol\",\"required\":[\"file\"],\"properties\":{\"file\":{\"type\":\"string\",\"minLength\":1,\"description\":\"File path relative to repository root\"},\"symbol\":{\"type\":\"string\",\"description\":\"Named code element (e.g., ClassName.methodName, function_name)\"}}},\"RepositoryContext\":{\"type\":\"object\",\"description\":\"Repository context for the source reference\",\"properties\":{\"url\":{\"type\":\"string\",\"format\":\"uri\",\"description\":\"Git remote URL (HTTPS or SSH format)\"},\"commit\":{\"type\":\"string\",\"pattern\":\"^[0-9a-f]{40}$\",\"description\":\"Full 40-character Git commit SHA\"}}},\"SourceReference\":{\"type\":\"object\",\"description\":\"Links entity to source code location(s) with provenance tracking. For inferred or generated elements, locations may be omitted when no source file exists yet.\",\"required\":[\"provenance\"],\"properties\":{\"provenance\":{\"$ref\":\"#/definitions/ProvenanceType\"},\"locations\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/SourceLocation\"},\"description\":\"One or more source code locations. Required for extracted and manual provenance; optional for inferred and generated.\"},\"repository\":{\"$ref\":\"#/definitions/RepositoryContext\"}}}}});\n/**\n * Pre-compiled validator for AttributeSpec Definitions\n * Compiled once at module load, pre-cached for use throughout runtime\n */\nexport const validateAttributeSpec: ValidateFunction = sharedAjv.compile({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"AttributeSpec Definitions\",\"description\":\"Reusable definition for attribute specifications used in spec-level schemas (e.g., spec-node-relationship attributes)\",\"definitions\":{\"AttributeSpec\":{\"type\":\"object\",\"title\":\"AttributeSpec\",\"description\":\"Specification for a single attribute that can appear on node or relationship instances\",\"required\":[\"type\",\"description\"],\"additionalProperties\":false,\"properties\":{\"type\":{\"type\":\"string\",\"enum\":[\"string\",\"integer\",\"number\",\"boolean\",\"array\",\"object\",\"enum\"],\"description\":\"The JSON type of this attribute\"},\"description\":{\"type\":\"string\",\"description\":\"Human-readable description of this attribute's purpose\"},\"enum_values\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"Required when type is 'enum'. Lists the valid string values for this attribute.\",\"examples\":[[\"high\",\"medium\",\"low\"],[\"active\",\"inactive\",\"archived\"]]},\"format\":{\"type\":\"string\",\"description\":\"Optional format constraint for string types (e.g., 'email', 'uri', 'date-time')\",\"examples\":[\"email\",\"uri\",\"date-time\",\"uuid\"]},\"default\":{\"description\":\"Default value for this attribute when not provided on a node instance. Can be any JSON value.\"}},\"if\":{\"properties\":{\"type\":{\"const\":\"enum\"}},\"required\":[\"type\"]},\"then\":{\"required\":[\"type\",\"description\",\"enum_values\"]}}}});\n"],
|
|
5
|
-
"mappings": "AAYA,OAAO,SAAS;AAEhB,OAAO,gBAAgB;AAIvB,MAAM,aAAa,MAAK;AACtB,QAAM,MAAM,IAAI,IAAI;IAClB,WAAW;IACX,QAAQ;IACR,iBAAiB;GAClB;AACD,oBAAW,GAAG,GAGd,IAAI,UAAU,EAAC,SAAU,2CAA0C,OAAQ,YAAW,aAAc,+HAA8H,MAAO,UAAS,UAAW,CAAC,MAAK,QAAO,gBAAe,QAAO,MAAM,GAAE,sBAAuB,IAAM,YAAa,EAAC,IAAK,EAAC,MAAO,UAAS,QAAS,QAAO,aAAc,sFAAqF,UAAW,CAAC,sCAAsC,EAAC,GAAE,MAAO,EAAC,MAAO,UAAS,SAAU,yDAAwD,aAAc,yGAAwG,GAAE,cAAe,EAAC,MAAO,UAAS,SAAU,+BAA8B,aAAc,uFAAsF,GAAE,MAAO,EAAC,MAAO,UAAS,aAAc,qHAAoH,UAAW,CAAC,QAAO,eAAc,YAAW,OAAO,EAAC,GAAE,UAAW,EAAC,MAAO,UAAS,SAAU,qBAAoB,aAAc,mHAAkH,GAAE,MAAO,EAAC,MAAO,UAAS,aAAc,gCAA+B,UAAW,CAAC,iCAAgC,kBAAiB,gBAAgB,EAAC,GAAE,aAAc,EAAC,MAAO,UAAS,aAAc,+DAA8D,GAAE,YAAa,EAAC,MAAO,UAAS,aAAc,+JAA8J,GAAE,kBAAmB,EAAC,MAAO,mEAAkE,aAAc,0EAAyE,GAAE,UAAW,EAAC,MAAO,UAAS,aAAc,2EAA0E,sBAAuB,IAAM,YAAa,EAAC,YAAa,EAAC,MAAO,UAAS,QAAS,aAAY,aAAc,gDAA+C,GAAE,YAAa,EAAC,MAAO,UAAS,QAAS,aAAY,aAAc,8CAA6C,GAAE,YAAa,EAAC,MAAO,UAAS,aAAc,wCAAuC,GAAE,SAAU,EAAC,MAAO,WAAU,SAAU,GAAE,aAAc,uDAAsD,EAAC,EAAC,EAAC,EAAC,GAAG,4BAA4B,GACtgF,IAAI,UAAU,EAAC,SAAU,2CAA0C,OAAQ,wBAAuB,aAAc,+KAA8K,MAAO,UAAS,UAAW,CAAC,MAAK,uBAAsB,4BAA2B,WAAW,GAAE,sBAAuB,IAAM,YAAa,EAAC,IAAK,EAAC,MAAO,UAAS,SAAU,iCAAgC,aAAc,yHAAwH,UAAW,CAAC,kCAAiC,gCAA+B,wBAAwB,EAAC,GAAE,qBAAsB,EAAC,MAAO,UAAS,SAAU,+BAA8B,aAAc,qEAAoE,GAAE,cAAe,EAAC,MAAO,UAAS,SAAU,qBAAoB,aAAc,iFAAgF,GAAE,0BAA2B,EAAC,MAAO,UAAS,SAAU,+BAA8B,aAAc,0EAAyE,GAAE,mBAAoB,EAAC,MAAO,UAAS,SAAU,qBAAoB,aAAc,sFAAqF,GAAE,WAAY,EAAC,MAAO,UAAS,aAAc,8GAA6G,UAAW,CAAC,YAAW,YAAW,YAAW,
|
|
4
|
+
"sourcesContent": ["/**\n * GENERATED FILE - DO NOT EDIT\n * This file is automatically generated by scripts/generate-validators.ts\n * during the build process. Changes will be overwritten.\n *\n * Pre-compiled AJV validators for base schemas\n * Eliminates runtime schema loading overhead by baking validators into the bundle\n *\n * Source: cli/src/schemas/bundled/base/\n * Build-time generation prevents runtime file I/O and schema compilation\n */\n\nimport Ajv from \"ajv\";\nimport { ValidateFunction } from \"ajv\";\nimport addFormats from \"ajv-formats\";\n\n\n// Shared AJV instance for all validators to handle schema references\nconst sharedAjv = (() => {\n const ajv = new Ajv({\n allErrors: true,\n strict: false,\n validateFormats: true,\n });\n addFormats(ajv);\n\n // Register all base schemas for reference resolution\n ajv.addSchema({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"SpecNode\",\"description\":\"Base schema for all spec node types. Each node type schema extends this with type-specific attribute constraints via allOf.\",\"type\":\"object\",\"required\":[\"id\",\"path\",\"spec_node_id\",\"type\",\"name\"],\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\",\"format\":\"uuid\",\"description\":\"Unique node instance identifier (UUIDv4). Globally unique across the entire model.\",\"examples\":[\"550e8400-e29b-41d4-a716-446655440000\"]},\"path\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*\\\\.[a-z][a-z0-9-]*\\\\.[a-z][a-z0-9-]*$\",\"description\":\"Human-readable element path in format {layer}.{type}.{name} (e.g., 'motivation.goal.increase-revenue')\"},\"spec_node_id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z][a-z0-9-]*$\",\"description\":\"Reference to the spec node type that this node conforms to (e.g., 'motivation.goal')\"},\"type\":{\"type\":\"string\",\"description\":\"Denormalized node type for efficient filtering and queries. Extracted from spec_node_id (the part after the dot).\",\"examples\":[\"goal\",\"requirement\",\"endpoint\",\"table\"]},\"layer_id\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*$\",\"description\":\"Denormalized layer ID for efficient layer-scoped queries. Extracted from spec_node_id (the part before the dot).\"},\"name\":{\"type\":\"string\",\"description\":\"Human-readable instance name\",\"examples\":[\"Improve Customer Satisfaction\",\"User Login API\",\"Customer Table\"]},\"description\":{\"type\":\"string\",\"description\":\"Optional detailed description of this specific node instance\"},\"attributes\":{\"type\":\"object\",\"description\":\"Attribute values for this node instance. Keys must correspond to attributes defined in the per-type schema, and values must conform to the type constraints.\"},\"source_reference\":{\"$ref\":\"urn:dr:spec:base:source-references#/definitions/SourceReference\",\"description\":\"Optional provenance tracking linking this node to source code locations\"},\"metadata\":{\"type\":\"object\",\"description\":\"Optional metadata about the lifecycle and version of this node instance\",\"additionalProperties\":false,\"properties\":{\"created_at\":{\"type\":\"string\",\"format\":\"date-time\",\"description\":\"ISO 8601 timestamp when this node was created\"},\"updated_at\":{\"type\":\"string\",\"format\":\"date-time\",\"description\":\"ISO 8601 timestamp of the last modification\"},\"created_by\":{\"type\":\"string\",\"description\":\"User or system that created this node\"},\"version\":{\"type\":\"integer\",\"minimum\":1,\"description\":\"Version number of this node (incremented on updates)\"}}}}}, \"urn:dr:spec:base:spec-node\");\n ajv.addSchema({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"SpecNodeRelationship\",\"description\":\"Base type for relationship type definitions in the specification. Defines valid relationships between node types, including cardinality, strength, and semantic properties.\",\"type\":\"object\",\"required\":[\"id\",\"source_spec_node_id\",\"destination_spec_node_id\",\"predicate\"],\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z-]+\\\\.[a-z-]+$\",\"description\":\"Unique relationship ID in format: {source-layer}.{predicate}.{dest-layer}. All components use lowercase with hyphens.\",\"examples\":[\"motivation.supports.motivation\",\"motivation.realizes.business\",\"api.exposes.data-model\"]},\"source_spec_node_id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z][a-z0-9-]*$\",\"description\":\"SpecNode ID that can serve as the source of this relationship type\"},\"source_layer\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*$\",\"description\":\"Denormalized layer ID extracted from source_spec_node_id for efficient queries\"},\"destination_spec_node_id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z][a-z0-9-]*$\",\"description\":\"SpecNode ID that can serve as the destination of this relationship type\"},\"destination_layer\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*$\",\"description\":\"Denormalized layer ID extracted from destination_spec_node_id for efficient queries\"},\"predicate\":{\"type\":\"string\",\"description\":\"Semantic predicate from PredicateCatalog describing the relationship type. Must be a valid predicate name.\",\"examples\":[\"supports\",\"realizes\",\"fulfills\",\"uses\",\"consumes\"]},\"cardinality\":{\"type\":\"string\",\"enum\":[\"one-to-one\",\"one-to-many\",\"many-to-one\",\"many-to-many\"],\"description\":\"Multiplicity constraint on this relationship type. Defines how many source nodes can relate to how many destination nodes.\",\"default\":\"many-to-many\"},\"strength\":{\"type\":\"string\",\"enum\":[\"critical\",\"high\",\"medium\",\"low\"],\"description\":\"Typical importance or strength of this relationship type\",\"default\":\"medium\"},\"required\":{\"type\":\"boolean\",\"description\":\"Whether instances of the source node type must have at least one relationship of this type\",\"default\":false},\"attributes\":{\"type\":\"object\",\"description\":\"Optional schema defining attributes that can appear on relationship instances of this type\",\"additionalProperties\":{\"$ref\":\"urn:dr:spec:base:attribute-spec#/definitions/AttributeSpec\"},\"minProperties\":0,\"examples\":[{\"reason\":{\"type\":\"string\",\"description\":\"Explanation for why this relationship exists\"},\"strength_override\":{\"type\":\"enum\",\"enum_values\":[\"critical\",\"high\",\"medium\",\"low\"],\"description\":\"Instance-specific strength override\"}}]}}}, \"urn:dr:spec:base:spec-node-relationship\");\n ajv.addSchema({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"Source Code Reference Definitions\",\"description\":\"Reusable JSON Schema definitions for linking architecture elements to source code locations\",\"version\":\"1.0.0\",\"definitions\":{\"ProvenanceType\":{\"type\":\"string\",\"enum\":[\"extracted\",\"manual\",\"inferred\",\"generated\"],\"description\":\"How this reference was created: extracted (automated ingestion), manual (human added), inferred (pattern matching), generated (code generated from model)\"},\"SourceLocation\":{\"type\":\"object\",\"description\":\"A specific location in source code, identified by file path and optional symbol\",\"required\":[\"file\"],\"properties\":{\"file\":{\"type\":\"string\",\"minLength\":1,\"description\":\"File path relative to repository root\"},\"symbol\":{\"type\":\"string\",\"description\":\"Named code element (e.g., ClassName.methodName, function_name)\"}}},\"RepositoryContext\":{\"type\":\"object\",\"description\":\"Repository context for the source reference\",\"properties\":{\"url\":{\"type\":\"string\",\"format\":\"uri\",\"description\":\"Git remote URL (HTTPS or SSH format)\"},\"commit\":{\"type\":\"string\",\"pattern\":\"^[0-9a-f]{40}$\",\"description\":\"Full 40-character Git commit SHA\"}}},\"SourceReference\":{\"type\":\"object\",\"description\":\"Links entity to source code location(s) with provenance tracking. For inferred or generated elements, locations may be omitted when no source file exists yet.\",\"required\":[\"provenance\"],\"properties\":{\"provenance\":{\"$ref\":\"#/definitions/ProvenanceType\"},\"locations\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/SourceLocation\"},\"description\":\"One or more source code locations. Required for extracted and manual provenance; optional for inferred and generated.\"},\"repository\":{\"$ref\":\"#/definitions/RepositoryContext\"}}}}}, \"urn:dr:spec:base:source-references\");\n ajv.addSchema({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"AttributeSpec Definitions\",\"description\":\"Reusable definition for attribute specifications used in spec-level schemas (e.g., spec-node-relationship attributes)\",\"definitions\":{\"AttributeSpec\":{\"type\":\"object\",\"title\":\"AttributeSpec\",\"description\":\"Specification for a single attribute that can appear on node or relationship instances\",\"required\":[\"type\",\"description\"],\"additionalProperties\":false,\"properties\":{\"type\":{\"type\":\"string\",\"enum\":[\"string\",\"integer\",\"number\",\"boolean\",\"array\",\"object\",\"enum\"],\"description\":\"The JSON type of this attribute\"},\"description\":{\"type\":\"string\",\"description\":\"Human-readable description of this attribute's purpose\"},\"enum_values\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"Required when type is 'enum'. Lists the valid string values for this attribute.\",\"examples\":[[\"high\",\"medium\",\"low\"],[\"active\",\"inactive\",\"archived\"]]},\"format\":{\"type\":\"string\",\"description\":\"Optional format constraint for string types (e.g., 'email', 'uri', 'date-time')\",\"examples\":[\"email\",\"uri\",\"date-time\",\"uuid\"]},\"default\":{\"description\":\"Default value for this attribute when not provided on a node instance. Can be any JSON value.\"}},\"if\":{\"properties\":{\"type\":{\"const\":\"enum\"}},\"required\":[\"type\"]},\"then\":{\"required\":[\"type\",\"description\",\"enum_values\"]}}}}, \"urn:dr:spec:base:attribute-spec\");\n\n return ajv;\n})();\n\n/**\n * Pre-compiled validator for SpecNode\n * Compiled once at module load, pre-cached for use throughout runtime\n */\nexport const validateSpecNode: ValidateFunction = sharedAjv.compile({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"SpecNode\",\"description\":\"Base schema for all spec node types. Each node type schema extends this with type-specific attribute constraints via allOf.\",\"type\":\"object\",\"required\":[\"id\",\"path\",\"spec_node_id\",\"type\",\"name\"],\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\",\"format\":\"uuid\",\"description\":\"Unique node instance identifier (UUIDv4). Globally unique across the entire model.\",\"examples\":[\"550e8400-e29b-41d4-a716-446655440000\"]},\"path\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*\\\\.[a-z][a-z0-9-]*\\\\.[a-z][a-z0-9-]*$\",\"description\":\"Human-readable element path in format {layer}.{type}.{name} (e.g., 'motivation.goal.increase-revenue')\"},\"spec_node_id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z][a-z0-9-]*$\",\"description\":\"Reference to the spec node type that this node conforms to (e.g., 'motivation.goal')\"},\"type\":{\"type\":\"string\",\"description\":\"Denormalized node type for efficient filtering and queries. Extracted from spec_node_id (the part after the dot).\",\"examples\":[\"goal\",\"requirement\",\"endpoint\",\"table\"]},\"layer_id\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*$\",\"description\":\"Denormalized layer ID for efficient layer-scoped queries. Extracted from spec_node_id (the part before the dot).\"},\"name\":{\"type\":\"string\",\"description\":\"Human-readable instance name\",\"examples\":[\"Improve Customer Satisfaction\",\"User Login API\",\"Customer Table\"]},\"description\":{\"type\":\"string\",\"description\":\"Optional detailed description of this specific node instance\"},\"attributes\":{\"type\":\"object\",\"description\":\"Attribute values for this node instance. Keys must correspond to attributes defined in the per-type schema, and values must conform to the type constraints.\"},\"source_reference\":{\"$ref\":\"urn:dr:spec:base:source-references#/definitions/SourceReference\",\"description\":\"Optional provenance tracking linking this node to source code locations\"},\"metadata\":{\"type\":\"object\",\"description\":\"Optional metadata about the lifecycle and version of this node instance\",\"additionalProperties\":false,\"properties\":{\"created_at\":{\"type\":\"string\",\"format\":\"date-time\",\"description\":\"ISO 8601 timestamp when this node was created\"},\"updated_at\":{\"type\":\"string\",\"format\":\"date-time\",\"description\":\"ISO 8601 timestamp of the last modification\"},\"created_by\":{\"type\":\"string\",\"description\":\"User or system that created this node\"},\"version\":{\"type\":\"integer\",\"minimum\":1,\"description\":\"Version number of this node (incremented on updates)\"}}}}});\n/**\n * Pre-compiled validator for SpecNodeRelationship\n * Compiled once at module load, pre-cached for use throughout runtime\n */\nexport const validateSpecNodeRelationship: ValidateFunction = sharedAjv.compile({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"SpecNodeRelationship\",\"description\":\"Base type for relationship type definitions in the specification. Defines valid relationships between node types, including cardinality, strength, and semantic properties.\",\"type\":\"object\",\"required\":[\"id\",\"source_spec_node_id\",\"destination_spec_node_id\",\"predicate\"],\"additionalProperties\":false,\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z-]+\\\\.[a-z-]+$\",\"description\":\"Unique relationship ID in format: {source-layer}.{predicate}.{dest-layer}. All components use lowercase with hyphens.\",\"examples\":[\"motivation.supports.motivation\",\"motivation.realizes.business\",\"api.exposes.data-model\"]},\"source_spec_node_id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z][a-z0-9-]*$\",\"description\":\"SpecNode ID that can serve as the source of this relationship type\"},\"source_layer\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*$\",\"description\":\"Denormalized layer ID extracted from source_spec_node_id for efficient queries\"},\"destination_spec_node_id\":{\"type\":\"string\",\"pattern\":\"^[a-z-]+\\\\.[a-z][a-z0-9-]*$\",\"description\":\"SpecNode ID that can serve as the destination of this relationship type\"},\"destination_layer\":{\"type\":\"string\",\"pattern\":\"^[a-z][a-z0-9-]*$\",\"description\":\"Denormalized layer ID extracted from destination_spec_node_id for efficient queries\"},\"predicate\":{\"type\":\"string\",\"description\":\"Semantic predicate from PredicateCatalog describing the relationship type. Must be a valid predicate name.\",\"examples\":[\"supports\",\"realizes\",\"fulfills\",\"uses\",\"consumes\"]},\"cardinality\":{\"type\":\"string\",\"enum\":[\"one-to-one\",\"one-to-many\",\"many-to-one\",\"many-to-many\"],\"description\":\"Multiplicity constraint on this relationship type. Defines how many source nodes can relate to how many destination nodes.\",\"default\":\"many-to-many\"},\"strength\":{\"type\":\"string\",\"enum\":[\"critical\",\"high\",\"medium\",\"low\"],\"description\":\"Typical importance or strength of this relationship type\",\"default\":\"medium\"},\"required\":{\"type\":\"boolean\",\"description\":\"Whether instances of the source node type must have at least one relationship of this type\",\"default\":false},\"attributes\":{\"type\":\"object\",\"description\":\"Optional schema defining attributes that can appear on relationship instances of this type\",\"additionalProperties\":{\"$ref\":\"urn:dr:spec:base:attribute-spec#/definitions/AttributeSpec\"},\"minProperties\":0,\"examples\":[{\"reason\":{\"type\":\"string\",\"description\":\"Explanation for why this relationship exists\"},\"strength_override\":{\"type\":\"enum\",\"enum_values\":[\"critical\",\"high\",\"medium\",\"low\"],\"description\":\"Instance-specific strength override\"}}]}}});\n/**\n * Pre-compiled validator for Source Code Reference Definitions\n * Compiled once at module load, pre-cached for use throughout runtime\n */\nexport const validateSourceReference: ValidateFunction = sharedAjv.compile({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"Source Code Reference Definitions\",\"description\":\"Reusable JSON Schema definitions for linking architecture elements to source code locations\",\"version\":\"1.0.0\",\"definitions\":{\"ProvenanceType\":{\"type\":\"string\",\"enum\":[\"extracted\",\"manual\",\"inferred\",\"generated\"],\"description\":\"How this reference was created: extracted (automated ingestion), manual (human added), inferred (pattern matching), generated (code generated from model)\"},\"SourceLocation\":{\"type\":\"object\",\"description\":\"A specific location in source code, identified by file path and optional symbol\",\"required\":[\"file\"],\"properties\":{\"file\":{\"type\":\"string\",\"minLength\":1,\"description\":\"File path relative to repository root\"},\"symbol\":{\"type\":\"string\",\"description\":\"Named code element (e.g., ClassName.methodName, function_name)\"}}},\"RepositoryContext\":{\"type\":\"object\",\"description\":\"Repository context for the source reference\",\"properties\":{\"url\":{\"type\":\"string\",\"format\":\"uri\",\"description\":\"Git remote URL (HTTPS or SSH format)\"},\"commit\":{\"type\":\"string\",\"pattern\":\"^[0-9a-f]{40}$\",\"description\":\"Full 40-character Git commit SHA\"}}},\"SourceReference\":{\"type\":\"object\",\"description\":\"Links entity to source code location(s) with provenance tracking. For inferred or generated elements, locations may be omitted when no source file exists yet.\",\"required\":[\"provenance\"],\"properties\":{\"provenance\":{\"$ref\":\"#/definitions/ProvenanceType\"},\"locations\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#/definitions/SourceLocation\"},\"description\":\"One or more source code locations. Required for extracted and manual provenance; optional for inferred and generated.\"},\"repository\":{\"$ref\":\"#/definitions/RepositoryContext\"}}}}});\n/**\n * Pre-compiled validator for AttributeSpec Definitions\n * Compiled once at module load, pre-cached for use throughout runtime\n */\nexport const validateAttributeSpec: ValidateFunction = sharedAjv.compile({\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"AttributeSpec Definitions\",\"description\":\"Reusable definition for attribute specifications used in spec-level schemas (e.g., spec-node-relationship attributes)\",\"definitions\":{\"AttributeSpec\":{\"type\":\"object\",\"title\":\"AttributeSpec\",\"description\":\"Specification for a single attribute that can appear on node or relationship instances\",\"required\":[\"type\",\"description\"],\"additionalProperties\":false,\"properties\":{\"type\":{\"type\":\"string\",\"enum\":[\"string\",\"integer\",\"number\",\"boolean\",\"array\",\"object\",\"enum\"],\"description\":\"The JSON type of this attribute\"},\"description\":{\"type\":\"string\",\"description\":\"Human-readable description of this attribute's purpose\"},\"enum_values\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"description\":\"Required when type is 'enum'. Lists the valid string values for this attribute.\",\"examples\":[[\"high\",\"medium\",\"low\"],[\"active\",\"inactive\",\"archived\"]]},\"format\":{\"type\":\"string\",\"description\":\"Optional format constraint for string types (e.g., 'email', 'uri', 'date-time')\",\"examples\":[\"email\",\"uri\",\"date-time\",\"uuid\"]},\"default\":{\"description\":\"Default value for this attribute when not provided on a node instance. Can be any JSON value.\"}},\"if\":{\"properties\":{\"type\":{\"const\":\"enum\"}},\"required\":[\"type\"]},\"then\":{\"required\":[\"type\",\"description\",\"enum_values\"]}}}});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,7 +2,7 @@ const LAYER_METADATA_MOTIVATION = {
|
|
|
2
2
|
id: "motivation",
|
|
3
3
|
number: 1,
|
|
4
4
|
name: "Motivation Layer",
|
|
5
|
-
description: "
|
|
5
|
+
description: "Captures why the system exists: stakeholders and their drivers, assessments, goals and outcomes, principles, requirements and constraints, and the meaning and value attached to them (ArchiMate 3.2 motivation elements). Motivation elements are expressed in documents, decision records and requirement text rather than in executable code; every lower layer should be traceable back to an element here. Modelling rules: realization runs through motivation, as in ArchiMate: requirements realize the outcomes, goals and principles they make concrete, and outcomes realize goals. Decomposition is same-type only: an element aggregates the narrower elements of its own type that make it up, and specializes a more general one. Influence is one motivation element shaping another: drivers, assessments, stakeholders, goals, principles and constraints influence goals, outcomes, principles, requirements and constraints, and a constraint constrains the requirements it limits. Association is kept for concerns and interpretation: a stakeholder is associated with the drivers, goals, requirements, principles, outcomes and constraints it cares about, an assessment with the drivers it evaluates, and meaning and value are associated with any concept and are always the source of that association. Other layers trace to motivation with one predicate per meaning: they satisfy requirements, constraints and principles; an element realizes a goal or outcome it exists to achieve and supports one it contributes to alongside others; services and features deliver value, and user workflows deliver the outcomes they produce. A stakeholder is not served: business actors and roles, like personas, reference the stakeholder whose concerns they stand for.",
|
|
6
6
|
nodeTypes: ["motivation.assessment", "motivation.constraint", "motivation.driver", "motivation.goal", "motivation.meaning", "motivation.outcome", "motivation.principle", "motivation.requirement", "motivation.stakeholder", "motivation.value"],
|
|
7
7
|
inspiredBy: {
|
|
8
8
|
standard: "ArchiMate 3.2",
|
|
@@ -13,8 +13,8 @@ const LAYER_METADATA_MOTIVATION = {
|
|
|
13
13
|
id: "business",
|
|
14
14
|
number: 2,
|
|
15
15
|
name: "Business Layer",
|
|
16
|
-
description: "
|
|
17
|
-
nodeTypes: ["business.businessactor", "business.businesscollaboration", "business.businessevent", "business.businessfunction", "business.businessinteraction", "business.businessinterface", "business.businessobject", "business.businessprocess", "business.businessrole", "business.businessservice", "business.contract", "business.product", "business.representation"],
|
|
16
|
+
description: "Describes what the organization does independently of the software that supports it: business actors and roles, collaborations and interfaces, processes, functions, interactions and events, business services and business objects, and the business capabilities the organization has (ArchiMate 3.2 business layer, with the strategy layer's Capability). Elements here are realized by application services and consume no implementation detail. Modelling rules: actors fill roles, and roles and collaborations are assigned to the processes, functions and interactions they perform (assigned-to); behaviour is never assigned to an actor directly. Internal behaviour realizes business services, which interfaces offer (assigned-to) and which serve actors, roles and processes. Only behaviour accesses business objects and contracts; actors, roles and interfaces reach information through the behaviour assigned to them. Events trigger processes and interactions, and behaviour raises events (triggers); a hand-off between behaviours is flows-to, and a function, having no start, is reached by flows rather than triggered. A business capability is an ability the organization has: business functions and processes realize it, capabilities aggregate narrower capabilities, and software capabilities (product layer) contribute by realizing the business functions behind it. Business services and business capabilities carry the main link to motivation: services realize goals and outcomes, satisfy requirements and deliver value; capabilities support goals and realize outcomes; processes may also realize outcomes and satisfy requirements.",
|
|
17
|
+
nodeTypes: ["business.businessactor", "business.businesscapability", "business.businesscollaboration", "business.businessevent", "business.businessfunction", "business.businessinteraction", "business.businessinterface", "business.businessobject", "business.businessprocess", "business.businessrole", "business.businessservice", "business.contract", "business.product", "business.representation"],
|
|
18
18
|
inspiredBy: {
|
|
19
19
|
standard: "ArchiMate 3.2",
|
|
20
20
|
version: "3.2",
|
|
@@ -24,8 +24,8 @@ const LAYER_METADATA_MOTIVATION = {
|
|
|
24
24
|
id: "product",
|
|
25
25
|
number: 3,
|
|
26
26
|
name: "Product Layer",
|
|
27
|
-
description: "
|
|
28
|
-
nodeTypes: ["product.
|
|
27
|
+
description: "Frames the system from a product-management point of view: the personas it serves, the software capabilities it must possess, the features that deliver them, the user workflows that exercise them and the milestones that schedule delivery. It adapts the ArchiMate 3.2 strategy vocabulary rather than adopting it: a software capability is an ability of the software platform, not ArchiMate's Capability, which is the organization's ability and is modelled as business.businesscapability. Product elements describe what the software offers and to whom, never how it is built. Modelling rules: realization runs upward through product. Application and technology services realize software capabilities and features, views realize features, and navigation flows and flow steps realize user workflows and their steps; product elements in turn realize business behaviour, a software capability realizing the business function it carries out and a user workflow the business process the user performs. A feature realizes the software capabilities it exercises; software capabilities aggregate narrower capabilities, and capabilities and features may depend on their own kind. Features and user workflows serve the personas they are designed for; a persona describes a kind of person, so it references the stakeholder and business role it stands for rather than realizing or serving them. A user workflow composes its steps, steps flow to steps, and each step uses the features it exercises; a workflow reaches features and software capabilities only through its steps. Software capabilities support goals; software capabilities and features satisfy requirements; features deliver value and workflows deliver outcomes. Software capabilities and features are scheduled for milestones, and milestones precede milestones.",
|
|
28
|
+
nodeTypes: ["product.softwarecapability", "product.feature", "product.milestone", "product.persona", "product.userworkflow", "product.workflowstep"],
|
|
29
29
|
inspiredBy: {
|
|
30
30
|
standard: "ArchiMate 3.2 Strategy Extension + Product Management Practice",
|
|
31
31
|
version: "3.2",
|
|
@@ -35,7 +35,7 @@ const LAYER_METADATA_MOTIVATION = {
|
|
|
35
35
|
id: "security",
|
|
36
36
|
number: 4,
|
|
37
37
|
name: "Security Layer",
|
|
38
|
-
description: "
|
|
38
|
+
description: "Defines how the system identifies, authorizes and protects: authentication configuration, roles, permissions, secure resources and their operations, access conditions and field-level controls, declarative policies and rules, data classification and rate limits, together with goal-oriented security concepts such as actors, objectives, delegations, threats, countermeasures and accountability (NIST SP 800-53 controls with STS-ml and XACML-style policy modelling). Code that checks identity or enforces permissions is evidence for elements here. Modelling rules: the security model composes its authentication configuration, constraints container and policies, and aggregates the shared elements (actors, roles, permissions, secure resources, information entities, delegations, threats, classifications and accountability requirements); a policy composes its rules, and a secure resource composes its operations and field access controls. Actors are assigned to roles, roles aggregate permissions and specialize a parent role, and permissions authorize resource operations; access follows that chain. An authentication configuration authenticates actors, uses its password policy and protects resources. A policy rule uses the conditions it evaluates, protects its target, authorizes permissions, triggers its policy actions and generates evidence; conditions and actions do not constrain or trigger on their own. Policies (security, password, retention and data classification) mandate the countermeasures they call for, and only countermeasures mitigate threats. A threat targets resources, information entities and business processes and services, influences classifications and policies, and references the motivation driver it gives rise to. Audit configurations, policy rules and delegations generate evidence; an audit configuration monitors resources and satisfies accountability requirements, and a retention policy governs the audit trails, evidence and information it keeps. A data classification governs the information entities, secure resources and retention policies it labels; field access controls are constrained by it, and data elements in other layers reference it. Separation of duty, binding of duty and need to know constrain roles, permissions and operations; the constraints container only groups them, and other layers link to the individual rule they follow. Validation rules constrain field values; they do not decide access.",
|
|
39
39
|
nodeTypes: ["security.accesscondition", "security.accountabilityrequirement", "security.actor", "security.auditconfig", "security.authenticationconfig", "security.bindingofduty", "security.condition", "security.countermeasure", "security.dataclassification", "security.delegation", "security.evidence", "security.fieldaccesscontrol", "security.informationentity", "security.informationright", "security.needtoknow", "security.passwordpolicy", "security.permission", "security.policyaction", "security.policyrule", "security.resourceoperation", "security.retentionpolicy", "security.role", "security.secureresource", "security.securityconstraints", "security.securitymodel", "security.securitypolicy", "security.separationofduty", "security.threat", "security.validationrule"],
|
|
40
40
|
inspiredBy: {
|
|
41
41
|
standard: "NIST SP 800-53",
|
|
@@ -46,7 +46,7 @@ const LAYER_METADATA_MOTIVATION = {
|
|
|
46
46
|
id: "application",
|
|
47
47
|
number: 5,
|
|
48
48
|
name: "Application Layer",
|
|
49
|
-
description: "
|
|
49
|
+
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).",
|
|
50
50
|
nodeTypes: ["application.applicationcollaboration", "application.applicationcomponent", "application.applicationevent", "application.applicationfunction", "application.applicationinteraction", "application.applicationinterface", "application.applicationprocess", "application.applicationservice", "application.dataobject"],
|
|
51
51
|
inspiredBy: {
|
|
52
52
|
standard: "ArchiMate 3.2",
|
|
@@ -57,7 +57,7 @@ const LAYER_METADATA_MOTIVATION = {
|
|
|
57
57
|
id: "technology",
|
|
58
58
|
number: 6,
|
|
59
59
|
name: "Technology Layer",
|
|
60
|
-
description: "
|
|
60
|
+
description: "Models the infrastructure and platform the application runs on: nodes and devices, system software and runtimes, frameworks, communication networks and paths, technology services, interfaces, functions and processes, and the artifacts that are deployed to them (ArchiMate 3.2 technology layer). Package manifests, container images, deployment descriptors and infrastructure-as-code are the usual evidence. Modelling rules: nodes compose their devices, system software, interfaces and the artifacts deployed to them; nodes and system software are assigned to the functions and processes they perform, and a collaboration aggregates the nodes, system software and nested collaborations that cooperate in it and is assigned to its interactions. System software provides the interfaces it declares; an interface is assigned to the technology services it offers and serves the behaviour that uses it. Functions, processes and interactions realize technology services, and a node, system software, collaboration, path or network may realize one directly; a hand-off between behaviours is flows-to; events trigger behaviour, behaviour and services raise events, and structure does not trigger. Artifacts are passive: behaviour and system software access them, and they realize the system software they install and the application components they package, such as a container image. A communication network realizes the paths over it, and networks and paths connect the nodes and devices on them; other elements reach a network through the node they run on. Technology services serve nodes, other services and the application (components, services and functions); a node, device or system software may serve an application component directly as a shortcut for hosting it. Technology reaches the business layer through the application layer. Services carry the link to motivation: they realize goals and software capabilities and satisfy requirements; structure satisfies requirements, constraints and principles. Other layers reach technology in two ways: platform services serve the API, UX, APM, navigation and data-store elements that use them, and an element built on or run by a software product depends on that system software (a data-store database also depends on its node).",
|
|
61
61
|
nodeTypes: ["technology.artifact", "technology.communicationnetwork", "technology.device", "technology.node", "technology.path", "technology.systemsoftware", "technology.technologycollaboration", "technology.technologyevent", "technology.technologyfunction", "technology.technologyinteraction", "technology.technologyinterface", "technology.technologyprocess", "technology.technologyservice"],
|
|
62
62
|
inspiredBy: {
|
|
63
63
|
standard: "ArchiMate 3.2",
|
|
@@ -68,7 +68,7 @@ const LAYER_METADATA_MOTIVATION = {
|
|
|
68
68
|
id: "api",
|
|
69
69
|
number: 7,
|
|
70
70
|
name: "API Layer",
|
|
71
|
-
description: "
|
|
71
|
+
description: "Describes the HTTP API surface the application exposes or consumes: the API document and its servers, paths and operations, parameters, request bodies and responses, media types, headers, links and callbacks, reusable components and schemas, security schemes and webhooks (OpenAPI 3.0). Route handlers, controllers and generated API clients are evidence for elements here; the application behaviour behind an operation belongs to the application layer. Modelling rules: each API object links only to what its OpenAPI 3.0 fields hold, and every nesting in the document tree is composes: the document composes its info, paths, components, servers and tags; paths compose path items, and a path item composes its operations, parameters and servers; an operation composes its parameters, request body, responses map, callbacks and servers; the responses map composes its responses, and a response composes its headers, media types and links; a media type composes its schema, examples and encodings; a server composes its variables, a security scheme its OAuth flows, and components their reusable entries. Reuse through $ref is references, and allOf inheritance is specializes. A rate limit, which OpenAPI does not define, governs the operations, path items and servers it caps, triggers its 429 response, references the headers and security scheme it counts by, and realizes its countermeasure. An operation realizes the application function it exposes and references its application service, and a document realizes its application service; the API reaches the business layer through the application layer. A security scheme realizes the security policy it applies, requires permissions and references the secure resource it protects. API schemas reach data stores and business objects through the data-model schemas that map to them. An operation satisfies requirements and constraints, supports the goals and outcomes it contributes to, and realizes the countermeasures it implements.",
|
|
72
72
|
nodeTypes: ["api.callback", "api.components", "api.contact", "api.encoding", "api.example", "api.externaldocumentation", "api.header", "api.info", "api.license", "api.link", "api.mediatype", "api.oauthflow", "api.oauthflows", "api.openapidocument", "api.operation", "api.parameter", "api.pathitem", "api.ratelimit", "api.paths", "api.requestbody", "api.response", "api.responses", "api.schema", "api.securityscheme", "api.server", "api.servervariable", "api.tag"],
|
|
73
73
|
inspiredBy: {
|
|
74
74
|
standard: "OpenAPI 3.0",
|
|
@@ -79,8 +79,8 @@ const LAYER_METADATA_MOTIVATION = {
|
|
|
79
79
|
id: "data-model",
|
|
80
80
|
number: 8,
|
|
81
81
|
name: "Data Model Layer",
|
|
82
|
-
description: "
|
|
83
|
-
nodeTypes: [],
|
|
82
|
+
description: "Defines the logical data model: object schemas and their properties, enumerations, validation rules and the relationships between entities, independent of any particular storage technology (JSON Schema Draft 7). Entity classes, ORM models, DTO and record types, and type definitions that describe domain data are evidence for elements here; how that data is persisted belongs to the data-store layer. Modelling rules: data-model elements are passive structure; they are realized, accessed, referenced and mapped, and never serve, trigger or perform behaviour. A subschema written in place is part of what declares it (composes): a schema document composes its root schema and the definitions declared in it, an object schema composes its properties, an array schema its inline item schema, a composition its inline branches, and a property the value constraints it carries. A type declared elsewhere and reached by $ref or by name is referenced (references): a property references the object schema or definition its value takes, an array or composition references a named definition, and a Reference references the definition, object schema or document it points at. Subtyping is specializes. An entity class, an ORM model whatever the framework, or a type whose shape is published as a schema is an object schema; an in-code structure that only carries data between parts of the program is an application data object, which an object schema may realize. Object schemas and definitions realize the application data objects and business objects they give form to (a direct link to the business object is a shortcut through the data object), and map to their counterparts in other layers (maps-to): API schemas, request bodies, responses and parameters, and data-store collections. Behaviour reaches data by accessing it: application functions, components and events access object schemas and definitions, and business behaviour accesses the business objects they realize; a schema does not reference the behaviour that uses it. Schemas satisfy the requirements and constraints that govern the data but do not realize goals. The model is independent of technology: it does not depend on system software or use technology services, and the file that holds a schema document maps to a technology artifact.",
|
|
83
|
+
nodeTypes: ["data-model.arrayschema", "data-model.jsonschema", "data-model.numericschema", "data-model.objectschema", "data-model.reference", "data-model.schemacomposition", "data-model.schemadefinition", "data-model.schemaproperty", "data-model.stringschema"],
|
|
84
84
|
inspiredBy: {
|
|
85
85
|
standard: "JSON Schema Draft 7",
|
|
86
86
|
version: "Draft 7",
|
|
@@ -90,7 +90,7 @@ const LAYER_METADATA_MOTIVATION = {
|
|
|
90
90
|
id: "data-store",
|
|
91
91
|
number: 9,
|
|
92
92
|
name: "Data Store Layer",
|
|
93
|
-
description: "
|
|
93
|
+
description: "Describes physical persistence: databases and schemas, tables and collections, columns and fields, indexes, constraints, views, migrations, access patterns and the queries that read and write them (ISO/IEC 9075 SQL with extensions for document, key-value and graph paradigms). Migration scripts, table definitions and repository or DAO code that talks to storage are evidence for elements here. Modelling rules: containment is one level at a time: a database composes namespaces, or collections and views directly when the engine has none; a namespace composes collections, views, stored logic and nested namespaces; a collection composes its fields, indexes, validation rules and event handlers, and may compose partitions. Stored data is passive: collections, views, fields and databases are accessed, referenced and mapped, and never serve or trigger; application components, functions and services access the collections and views they read and write. Behaviour inside the store is stored logic, event handlers and access patterns: event handlers are attached to a collection, reference the fields they watch and trigger stored logic; stored logic accesses collections, triggers other stored logic and refreshes views; access patterns access a collection, use indexes and reference the fields in their key and filter conditions, and serve the application functions that issue them. Validation rules reference the fields they constrain, and a foreign key cascades to the collection it references. Views derive from collections and views; retention policies govern collections and namespaces, archive to collections and trigger the stored logic that purges them. Across layers, the store reaches the business through the application layer and the data model: stored logic realizes application functions, event handlers trigger application events, object schemas map to collections, and a collection may realize a business object as a shortcut; a view maps to the API response it backs.",
|
|
94
94
|
nodeTypes: ["data-store.accesspattern", "data-store.collection", "data-store.database", "data-store.eventhandler", "data-store.field", "data-store.index", "data-store.namespace", "data-store.retentionpolicy", "data-store.storedlogic", "data-store.validationrule", "data-store.view"],
|
|
95
95
|
inspiredBy: {
|
|
96
96
|
standard: "ISO/IEC 9075 (SQL) + Paradigm Extensions",
|
|
@@ -101,7 +101,7 @@ const LAYER_METADATA_MOTIVATION = {
|
|
|
101
101
|
id: "ux",
|
|
102
102
|
number: 10,
|
|
103
103
|
name: "UX Layer",
|
|
104
|
-
description: "
|
|
104
|
+
description: "Models the user interface: views and screens, library components and their application-specific instances, forms, action and state patterns, component properties and the visual hierarchy they compose (HTML 5.3 vocabulary with component-library conventions). Rendered components, templates and view classes are evidence for elements here; the logic they call belongs to the application layer and the paths that reach them to the navigation layer. Modelling rules: placement is composition. A view composes its sub-views, component instances and action components; a sub-view or library sub-view composes its instances; an instance composes its nested instances, action components, slot references, chart series and table columns, and a menu composes its entries. A UX library aggregates its library components and sub-views, and a library component composes the components and slot references it is built from; an instance or placed sub-view realizes the library definition it places, and a slot reference references the component that fills it. Elements apply their layout configuration; state transitions, state patterns and action patterns use transition templates, which describe motion only. A state pattern aggregates its states; a state composes its outgoing transitions, a transition flows to its destination state, states and transitions trigger state actions, and a state action realizes its template. An action pattern governs the action components it is applied to. A view, sub-view, component instance or action component binds to its data configuration, which maps to the API or data-model data it reads; chart series and table columns bind through their component. Elements use their error configuration. A view realizes the application interface it presents and the product feature it delivers; an action component triggers the API operation or application behaviour it starts. UX does not access stores, operations or services directly, and reaches the business layer through the application interfaces and features it realizes: a view serves the business role it is for and references the business object it shows. A view supports the goals and outcomes it contributes to, and UX elements satisfy requirements and principles.",
|
|
105
105
|
nodeTypes: ["ux.actioncomponent", "ux.actionpattern", "ux.chartseries", "ux.componentinstance", "ux.componentreference", "ux.dataconfig", "ux.errorconfig", "ux.experiencestate", "ux.layoutconfig", "ux.librarycomponent", "ux.librarysubview", "ux.stateaction", "ux.stateactiontemplate", "ux.statepattern", "ux.statetransition", "ux.subview", "ux.tablecolumn", "ux.transitiontemplate", "ux.uxapplication", "ux.uxlibrary", "ux.uxspec", "ux.view"],
|
|
106
106
|
inspiredBy: {
|
|
107
107
|
standard: "HTML 5.3",
|
|
@@ -112,7 +112,7 @@ const LAYER_METADATA_MOTIVATION = {
|
|
|
112
112
|
id: "navigation",
|
|
113
113
|
number: 11,
|
|
114
114
|
name: "Navigation Layer",
|
|
115
|
-
description: "
|
|
115
|
+
description: "Describes how a user moves through the application: routes and route parameters, navigation flows and their steps, guards and redirects, menus, deep links and the transitions between views (single-page-application navigation patterns). Router configuration and route tables are the usual evidence; the views reached belong to the UX layer and server-side HTTP endpoints to the API layer. Modelling rules: a navigation graph composes its routes and transitions and aggregates its flows, guards and breadcrumb configurations; a route composes its route meta and may contain child routes; a flow composes its steps and aggregates the context variables it carries. A transition leaves its source route (the route flows to it) and navigates to its destination route; a flow step navigates to its route, and a guard action redirects by navigating to a route. A guard evaluates its condition, triggers its action on denial and protects what it guards (routes, transitions, flows and flow steps); the condition and the action do not link to each other. Context variables are passive state: the steps, guards, conditions, actions and transitions that read or write them access them, and their value types map to data-model schema properties or reference data objects and schema documents. A breadcrumb configuration references the route meta it reads labels from, its home route and the flows it shows progress for. Across layers, a route maps to the UX view it renders and may lazy-load or depend on application components; routes, steps and guards use application services, access the data-model schemas they load or check, and are served by the API operations they call; they never reach the data store directly. Navigation reaches the business and motivation layers through the product user workflows and workflow steps that flows and steps realize, and satisfies requirements, constraints and principles.",
|
|
116
116
|
nodeTypes: ["navigation.breadcrumbconfig", "navigation.contextvariable", "navigation.flowstep", "navigation.guardaction", "navigation.guardcondition", "navigation.navigationflow", "navigation.navigationgraph", "navigation.navigationguard", "navigation.navigationtransition", "navigation.route", "navigation.routemeta"],
|
|
117
117
|
inspiredBy: {
|
|
118
118
|
standard: "SPA Navigation Patterns",
|
|
@@ -123,7 +123,7 @@ const LAYER_METADATA_MOTIVATION = {
|
|
|
123
123
|
id: "apm",
|
|
124
124
|
number: 12,
|
|
125
125
|
name: "APM Observability Layer",
|
|
126
|
-
description: "
|
|
126
|
+
description: "Defines how the system is observed in operation: instrumentation and telemetry configuration, metrics, spans and traces, logs, alerts, dashboards and service-level objectives, with the resources and attributes that describe them (OpenTelemetry 1.0). Logging, metrics and tracing code, exporters and alerting rules are evidence for elements here. Modelling rules: a resource identifies the producing entity: it aggregates the instrumentation scopes running in it, maps to the application component it describes and references its node and system software. A scope aggregates the spans, metric instruments and log records emitted under it, which inherit the resource through it; a span composes its events and aggregates its links. Trace, metric and log configurations (providers) depend on the resource they are built with and aggregate their processors and exporters; they configure telemetry and do not emit, serve or monitor it. An instrumentation configuration monitors the library or code it instruments and references the scope it emits under. Each signal flows through its own processors to exporters, and an exporter accesses the storage it writes to and is served by the technology service it sends to; signals of different kinds are correlated by references (a log record to its span, a metric's exemplars to spans, a span link to its span), not by flow. Only signals and instrumentation configurations monitor elements in other layers; alerts and dashboards monitor signals, and a dashboard references the alerts it shows. Telemetry reaches the business layer only through business KPIs, metric instruments that monitor business processes and services; a metric that tracks an outcome measures it, and telemetry satisfies requirements and constraints.",
|
|
127
127
|
nodeTypes: ["apm.alert", "apm.dashboard", "apm.exporterconfig", "apm.instrumentationconfig", "apm.instrumentationscope", "apm.logconfiguration", "apm.logprocessor", "apm.logrecord", "apm.metricconfiguration", "apm.metricinstrument", "apm.resource", "apm.span", "apm.spanevent", "apm.spanlink", "apm.traceconfiguration"],
|
|
128
128
|
inspiredBy: {
|
|
129
129
|
standard: "OpenTelemetry",
|
|
@@ -134,7 +134,7 @@ const LAYER_METADATA_MOTIVATION = {
|
|
|
134
134
|
id: "testing",
|
|
135
135
|
number: 13,
|
|
136
136
|
name: "Testing Layer",
|
|
137
|
-
description: "
|
|
137
|
+
description: "Describes how the system is verified: test strategies and plans, suites and cases, fixtures and test data, mocks and stubs, coverage targets and summaries, and the environments tests run in (IEEE 829-2008 test documentation). Test files, fixtures and test configuration are evidence for elements here; the production code under test belongs to the layer it implements. Modelling rules: each testing type has one composing parent. A test coverage model composes its coverage targets, input space partitions, context variations, environment factors, exclusions and coverage summary; a coverage target composes its target input fields, outcome categories, coverage requirements and test case sketches; a coverage requirement composes its input partition selections; a partition composes its values; a test case sketch composes its input selections. A test case sketch validates the one coverage requirement it exercises and references the context variation and outcome category it combines; each input selection references the partition value it picks. A coverage requirement references the context variations and outcome categories it needs, and reaches partition values only through its selections. A target input field references its partition and the field under test (an API parameter, schema property or UX component), so partitions stay reusable across fields; a selection references the values it picks, and a partition dependency references its trigger value and the partition it affects. Summaries report and never validate: a coverage summary aggregates the per-target summaries, a target coverage summary references its target, and both reference the gaps and exclusions they count. Gaps and exclusions reference the requirement or target they concern, and an exclusion references the gap it waives. Context variations reference the environment factors they fix, and environment factors reference only technology nodes and system software. A coverage target covers the production artifact it names; a test case sketch tests what it exercises, requires the software it runs on and accesses the stores holding its fixture data; the model covers only the application component, UX application or API document it is for. Requirements and summaries reach no other layer. The model carries the plan-level motivation links (it supports goals, satisfies principles, constraints and requirements, and measures outcomes), and test case sketches satisfy the requirements they verify.",
|
|
138
138
|
nodeTypes: ["testing.contextvariation", "testing.coverageexclusion", "testing.coveragegap", "testing.coveragerequirement", "testing.coveragesummary", "testing.environmentfactor", "testing.inputpartitionselection", "testing.inputselection", "testing.inputspacepartition", "testing.outcomecategory", "testing.partitiondependency", "testing.partitionvalue", "testing.targetcoveragesummary", "testing.targetinputfield", "testing.testcasesketch", "testing.testcoveragemodel", "testing.testcoveragetarget"],
|
|
139
139
|
inspiredBy: {
|
|
140
140
|
standard: "IEEE 829-2008",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/generated/layer-registry.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * GENERATED FILE - DO NOT EDIT\n * This file is automatically generated by scripts/generate-registry.ts\n * during the build process. Changes will be overwritten.\n *\n * Source: spec/layers/*.layer.json\n */\n\n/**\n * Layer metadata derived from specification layer instances\n */\nexport interface LayerMetadata {\n id: string; // \"motivation\", \"data-store\", etc. (canonical hyphenated form)\n number: number; // 1-13\n name: string; // \"Motivation Layer\", \"Data Store Layer\"\n description: string; // Layer description\n nodeTypes: string[]; // [\"motivation.goal\", \"motivation.requirement\", ...]\n inspiredBy?: {\n standard: string;\n version: string;\n url?: string;\n };\n}\n\n\nconst LAYER_METADATA_MOTIVATION: LayerMetadata = /*#__PURE__*/ {\n id: \"motivation\",\n number: 1,\n name: \"Motivation Layer\",\n description: \"Layer 1: Motivation Layer\",\n nodeTypes: [\"motivation.assessment\", \"motivation.constraint\", \"motivation.driver\", \"motivation.goal\", \"motivation.meaning\", \"motivation.outcome\", \"motivation.principle\", \"motivation.requirement\", \"motivation.stakeholder\", \"motivation.value\"],\n inspiredBy: {\n standard: \"ArchiMate 3.2\",\n version: \"3.2\",\n url: \"https://pubs.opengroup.org/architecture/archimate32-doc/\",\n },\n};\n\nconst LAYER_METADATA_BUSINESS: LayerMetadata = /*#__PURE__*/ {\n id: \"business\",\n number: 2,\n name: \"Business Layer\",\n description: \"Layer 2: Business Layer\",\n nodeTypes: [\"business.businessactor\", \"business.businesscollaboration\", \"business.businessevent\", \"business.businessfunction\", \"business.businessinteraction\", \"business.businessinterface\", \"business.businessobject\", \"business.businessprocess\", \"business.businessrole\", \"business.businessservice\", \"business.contract\", \"business.product\", \"business.representation\"],\n inspiredBy: {\n standard: \"ArchiMate 3.2\",\n version: \"3.2\",\n url: \"https://pubs.opengroup.org/architecture/archimate32-doc/\",\n },\n};\n\nconst LAYER_METADATA_PRODUCT: LayerMetadata = /*#__PURE__*/ {\n id: \"product\",\n number: 3,\n name: \"Product Layer\",\n description: \"Layer 3: Product Layer\",\n nodeTypes: [\"product.capability\", \"product.feature\", \"product.milestone\", \"product.persona\", \"product.userworkflow\"],\n inspiredBy: {\n standard: \"ArchiMate 3.2 Strategy Extension + Product Management Practice\",\n version: \"3.2\",\n url: \"https://pubs.opengroup.org/architecture/archimate32-doc/\",\n },\n};\n\nconst LAYER_METADATA_SECURITY: LayerMetadata = /*#__PURE__*/ {\n id: \"security\",\n number: 4,\n name: \"Security Layer\",\n description: \"Layer 4: Security Layer\",\n nodeTypes: [\"security.accesscondition\", \"security.accountabilityrequirement\", \"security.actor\", \"security.auditconfig\", \"security.authenticationconfig\", \"security.bindingofduty\", \"security.condition\", \"security.countermeasure\", \"security.dataclassification\", \"security.delegation\", \"security.evidence\", \"security.fieldaccesscontrol\", \"security.informationentity\", \"security.informationright\", \"security.needtoknow\", \"security.passwordpolicy\", \"security.permission\", \"security.policyaction\", \"security.policyrule\", \"security.resourceoperation\", \"security.retentionpolicy\", \"security.role\", \"security.secureresource\", \"security.securityconstraints\", \"security.securitymodel\", \"security.securitypolicy\", \"security.separationofduty\", \"security.threat\", \"security.validationrule\"],\n inspiredBy: {\n standard: \"NIST SP 800-53\",\n version: \"5.1\",\n url: \"https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-53r5.pdf\",\n },\n};\n\nconst LAYER_METADATA_APPLICATION: LayerMetadata = /*#__PURE__*/ {\n id: \"application\",\n number: 5,\n name: \"Application Layer\",\n description: \"Layer 5: Application Layer\",\n nodeTypes: [\"application.applicationcollaboration\", \"application.applicationcomponent\", \"application.applicationevent\", \"application.applicationfunction\", \"application.applicationinteraction\", \"application.applicationinterface\", \"application.applicationprocess\", \"application.applicationservice\", \"application.dataobject\"],\n inspiredBy: {\n standard: \"ArchiMate 3.2\",\n version: \"3.2\",\n url: \"https://pubs.opengroup.org/architecture/archimate32-doc/\",\n },\n};\n\nconst LAYER_METADATA_TECHNOLOGY: LayerMetadata = /*#__PURE__*/ {\n id: \"technology\",\n number: 6,\n name: \"Technology Layer\",\n description: \"Layer 6: Technology Layer\",\n nodeTypes: [\"technology.artifact\", \"technology.communicationnetwork\", \"technology.device\", \"technology.node\", \"technology.path\", \"technology.systemsoftware\", \"technology.technologycollaboration\", \"technology.technologyevent\", \"technology.technologyfunction\", \"technology.technologyinteraction\", \"technology.technologyinterface\", \"technology.technologyprocess\", \"technology.technologyservice\"],\n inspiredBy: {\n standard: \"ArchiMate 3.2\",\n version: \"3.2\",\n url: \"https://pubs.opengroup.org/architecture/archimate32-doc/\",\n },\n};\n\nconst LAYER_METADATA_API: LayerMetadata = /*#__PURE__*/ {\n id: \"api\",\n number: 7,\n name: \"API Layer\",\n description: \"Layer 7: API Layer\",\n nodeTypes: [\"api.callback\", \"api.components\", \"api.contact\", \"api.encoding\", \"api.example\", \"api.externaldocumentation\", \"api.header\", \"api.info\", \"api.license\", \"api.link\", \"api.mediatype\", \"api.oauthflow\", \"api.oauthflows\", \"api.openapidocument\", \"api.operation\", \"api.parameter\", \"api.pathitem\", \"api.ratelimit\", \"api.paths\", \"api.requestbody\", \"api.response\", \"api.responses\", \"api.schema\", \"api.securityscheme\", \"api.server\", \"api.servervariable\", \"api.tag\"],\n inspiredBy: {\n standard: \"OpenAPI 3.0\",\n version: \"3.0\",\n url: \"https://spec.openapis.org/oas/v3.0.0\",\n },\n};\n\nconst LAYER_METADATA_DATA_MODEL: LayerMetadata = /*#__PURE__*/ {\n id: \"data-model\",\n number: 8,\n name: \"Data Model Layer\",\n description: \"Layer 8: Data Model Layer\",\n nodeTypes: [],\n inspiredBy: {\n standard: \"JSON Schema Draft 7\",\n version: \"Draft 7\",\n url: \"https://json-schema.org/draft-07/\",\n },\n};\n\nconst LAYER_METADATA_DATA_STORE: LayerMetadata = /*#__PURE__*/ {\n id: \"data-store\",\n number: 9,\n name: \"Data Store Layer\",\n description: \"Layer 9: Data Store Layer\",\n nodeTypes: [\"data-store.accesspattern\", \"data-store.collection\", \"data-store.database\", \"data-store.eventhandler\", \"data-store.field\", \"data-store.index\", \"data-store.namespace\", \"data-store.retentionpolicy\", \"data-store.storedlogic\", \"data-store.validationrule\", \"data-store.view\"],\n inspiredBy: {\n standard: \"ISO/IEC 9075 (SQL) + Paradigm Extensions\",\n version: \"2024\",\n url: \"https://en.wikipedia.org/wiki/Database_model\",\n },\n};\n\nconst LAYER_METADATA_UX: LayerMetadata = /*#__PURE__*/ {\n id: \"ux\",\n number: 10,\n name: \"UX Layer\",\n description: \"Layer 10: UX Layer\",\n nodeTypes: [\"ux.actioncomponent\", \"ux.actionpattern\", \"ux.chartseries\", \"ux.componentinstance\", \"ux.componentreference\", \"ux.dataconfig\", \"ux.errorconfig\", \"ux.experiencestate\", \"ux.layoutconfig\", \"ux.librarycomponent\", \"ux.librarysubview\", \"ux.stateaction\", \"ux.stateactiontemplate\", \"ux.statepattern\", \"ux.statetransition\", \"ux.subview\", \"ux.tablecolumn\", \"ux.transitiontemplate\", \"ux.uxapplication\", \"ux.uxlibrary\", \"ux.uxspec\", \"ux.view\"],\n inspiredBy: {\n standard: \"HTML 5.3\",\n version: \"5.3\",\n url: \"https://html.spec.whatwg.org/\",\n },\n};\n\nconst LAYER_METADATA_NAVIGATION: LayerMetadata = /*#__PURE__*/ {\n id: \"navigation\",\n number: 11,\n name: \"Navigation Layer\",\n description: \"Layer 11: Navigation Layer\",\n nodeTypes: [\"navigation.breadcrumbconfig\", \"navigation.contextvariable\", \"navigation.flowstep\", \"navigation.guardaction\", \"navigation.guardcondition\", \"navigation.navigationflow\", \"navigation.navigationgraph\", \"navigation.navigationguard\", \"navigation.navigationtransition\", \"navigation.route\", \"navigation.routemeta\"],\n inspiredBy: {\n standard: \"SPA Navigation Patterns\",\n version: \"1.0\",\n url: \"https://www.w3.org/TR/navigation-timing-2/\",\n },\n};\n\nconst LAYER_METADATA_APM: LayerMetadata = /*#__PURE__*/ {\n id: \"apm\",\n number: 12,\n name: \"APM Observability Layer\",\n description: \"Layer 12: APM Observability Layer\",\n nodeTypes: [\"apm.alert\", \"apm.dashboard\", \"apm.exporterconfig\", \"apm.instrumentationconfig\", \"apm.instrumentationscope\", \"apm.logconfiguration\", \"apm.logprocessor\", \"apm.logrecord\", \"apm.metricconfiguration\", \"apm.metricinstrument\", \"apm.resource\", \"apm.span\", \"apm.spanevent\", \"apm.spanlink\", \"apm.traceconfiguration\"],\n inspiredBy: {\n standard: \"OpenTelemetry\",\n version: \"1.0\",\n url: \"https://opentelemetry.io/\",\n },\n};\n\nconst LAYER_METADATA_TESTING: LayerMetadata = /*#__PURE__*/ {\n id: \"testing\",\n number: 13,\n name: \"Testing Layer\",\n description: \"Layer 13: Testing Layer\",\n nodeTypes: [\"testing.contextvariation\", \"testing.coverageexclusion\", \"testing.coveragegap\", \"testing.coveragerequirement\", \"testing.coveragesummary\", \"testing.environmentfactor\", \"testing.inputpartitionselection\", \"testing.inputselection\", \"testing.inputspacepartition\", \"testing.outcomecategory\", \"testing.partitiondependency\", \"testing.partitionvalue\", \"testing.targetcoveragesummary\", \"testing.targetinputfield\", \"testing.testcasesketch\", \"testing.testcoveragemodel\", \"testing.testcoveragetarget\"],\n inspiredBy: {\n standard: \"IEEE 829-2008\",\n version: \"2008\",\n url: \"https://en.wikipedia.org/wiki/IEEE_829\",\n },\n};\n\n/**\n * All 13 layers with metadata, indexed by layer ID\n */\nexport const LAYERS: Map<string, LayerMetadata> = /*#__PURE__*/ new Map([\n [\"motivation\", LAYER_METADATA_MOTIVATION],\n [\"business\", LAYER_METADATA_BUSINESS],\n [\"product\", LAYER_METADATA_PRODUCT],\n [\"security\", LAYER_METADATA_SECURITY],\n [\"application\", LAYER_METADATA_APPLICATION],\n [\"technology\", LAYER_METADATA_TECHNOLOGY],\n [\"api\", LAYER_METADATA_API],\n [\"data-model\", LAYER_METADATA_DATA_MODEL],\n [\"data-store\", LAYER_METADATA_DATA_STORE],\n [\"ux\", LAYER_METADATA_UX],\n [\"navigation\", LAYER_METADATA_NAVIGATION],\n [\"apm\", LAYER_METADATA_APM],\n [\"testing\", LAYER_METADATA_TESTING]\n]);\n\n/**\n * All 13 layers with metadata, indexed by layer number for O(1) lookup\n */\nexport const LAYERS_BY_NUMBER: Map<number, LayerMetadata> = /*#__PURE__*/ new Map([\n [1, LAYER_METADATA_MOTIVATION],\n [2, LAYER_METADATA_BUSINESS],\n [3, LAYER_METADATA_PRODUCT],\n [4, LAYER_METADATA_SECURITY],\n [5, LAYER_METADATA_APPLICATION],\n [6, LAYER_METADATA_TECHNOLOGY],\n [7, LAYER_METADATA_API],\n [8, LAYER_METADATA_DATA_MODEL],\n [9, LAYER_METADATA_DATA_STORE],\n [10, LAYER_METADATA_UX],\n [11, LAYER_METADATA_NAVIGATION],\n [12, LAYER_METADATA_APM],\n [13, LAYER_METADATA_TESTING]\n]);\n\n/**\n * Layer hierarchy - ordered array of layer numbers for reference validation\n */\nexport const LAYER_HIERARCHY: readonly number[] = /*#__PURE__*/ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] as const;\n\n/**\n * Get layer metadata by layer number (1-13)\n */\nexport function getLayerByNumber(n: number): LayerMetadata | undefined {\n return LAYERS_BY_NUMBER.get(n);\n}\n\n/**\n * Get layer metadata by canonical layer ID\n */\nexport function getLayerById(id: string): LayerMetadata | undefined {\n return LAYERS.get(id);\n}\n\n/**\n * Check if a layer ID is valid\n */\nexport function isValidLayer(id: string): boolean {\n return LAYERS.has(id);\n}\n\n/**\n * Get all valid node types for a layer\n */\nexport function getNodeTypesForLayer(layerId: string): string[] {\n const layer = LAYERS.get(layerId);\n return layer ? layer.nodeTypes : [];\n}\n\n/**\n * Get all canonical layer IDs in numeric order\n */\nexport function getAllLayerIds(): string[] {\n return Array.from(LAYERS.values())\n .sort((a, b) => a.number - b.number)\n .map((l) => l.id);\n}\n\n/**\n * Get all layers in numeric order\n */\nexport function getAllLayers(): LayerMetadata[] {\n return Array.from(LAYERS.values()).sort((a, b) => a.number - b.number);\n}\n"],
|
|
5
|
-
"mappings": "AAyBA,MAAM,4BAAyD;EAC7D,IAAI;EACJ,QAAQ;EACR,MAAM;EACN,aAAa;EACb,WAAW,CAAC,yBAAyB,yBAAyB,qBAAqB,mBAAmB,sBAAsB,sBAAsB,wBAAwB,0BAA0B,0BAA0B,kBAAkB;EAChP,YAAY;IACV,UAAU;IACV,SAAS;IACT,KAAK;;GAIH,0BAAuD;EAC3D,IAAI;EACJ,QAAQ;EACR,MAAM;EACN,aAAa;EACb,WAAW,CAAC,0BAA0B,kCAAkC,0BAA0B,6BAA6B,gCAAgC,8BAA8B,2BAA2B,4BAA4B,yBAAyB,4BAA4B,qBAAqB,oBAAoB,yBAAyB;
|
|
4
|
+
"sourcesContent": ["/**\n * GENERATED FILE - DO NOT EDIT\n * This file is automatically generated by scripts/generate-registry.ts\n * during the build process. Changes will be overwritten.\n *\n * Source: spec/layers/*.layer.json\n */\n\n/**\n * Layer metadata derived from specification layer instances\n */\nexport interface LayerMetadata {\n id: string; // \"motivation\", \"data-store\", etc. (canonical hyphenated form)\n number: number; // 1-13\n name: string; // \"Motivation Layer\", \"Data Store Layer\"\n description: string; // Layer description\n nodeTypes: string[]; // [\"motivation.goal\", \"motivation.requirement\", ...]\n inspiredBy?: {\n standard: string;\n version: string;\n url?: string;\n };\n}\n\n\nconst LAYER_METADATA_MOTIVATION: LayerMetadata = /*#__PURE__*/ {\n id: \"motivation\",\n number: 1,\n name: \"Motivation Layer\",\n description: \"Captures why the system exists: stakeholders and their drivers, assessments, goals and outcomes, principles, requirements and constraints, and the meaning and value attached to them (ArchiMate 3.2 motivation elements). Motivation elements are expressed in documents, decision records and requirement text rather than in executable code; every lower layer should be traceable back to an element here. Modelling rules: realization runs through motivation, as in ArchiMate: requirements realize the outcomes, goals and principles they make concrete, and outcomes realize goals. Decomposition is same-type only: an element aggregates the narrower elements of its own type that make it up, and specializes a more general one. Influence is one motivation element shaping another: drivers, assessments, stakeholders, goals, principles and constraints influence goals, outcomes, principles, requirements and constraints, and a constraint constrains the requirements it limits. Association is kept for concerns and interpretation: a stakeholder is associated with the drivers, goals, requirements, principles, outcomes and constraints it cares about, an assessment with the drivers it evaluates, and meaning and value are associated with any concept and are always the source of that association. Other layers trace to motivation with one predicate per meaning: they satisfy requirements, constraints and principles; an element realizes a goal or outcome it exists to achieve and supports one it contributes to alongside others; services and features deliver value, and user workflows deliver the outcomes they produce. A stakeholder is not served: business actors and roles, like personas, reference the stakeholder whose concerns they stand for.\",\n nodeTypes: [\"motivation.assessment\", \"motivation.constraint\", \"motivation.driver\", \"motivation.goal\", \"motivation.meaning\", \"motivation.outcome\", \"motivation.principle\", \"motivation.requirement\", \"motivation.stakeholder\", \"motivation.value\"],\n inspiredBy: {\n standard: \"ArchiMate 3.2\",\n version: \"3.2\",\n url: \"https://pubs.opengroup.org/architecture/archimate32-doc/\",\n },\n};\n\nconst LAYER_METADATA_BUSINESS: LayerMetadata = /*#__PURE__*/ {\n id: \"business\",\n number: 2,\n name: \"Business Layer\",\n description: \"Describes what the organization does independently of the software that supports it: business actors and roles, collaborations and interfaces, processes, functions, interactions and events, business services and business objects, and the business capabilities the organization has (ArchiMate 3.2 business layer, with the strategy layer's Capability). Elements here are realized by application services and consume no implementation detail. Modelling rules: actors fill roles, and roles and collaborations are assigned to the processes, functions and interactions they perform (assigned-to); behaviour is never assigned to an actor directly. Internal behaviour realizes business services, which interfaces offer (assigned-to) and which serve actors, roles and processes. Only behaviour accesses business objects and contracts; actors, roles and interfaces reach information through the behaviour assigned to them. Events trigger processes and interactions, and behaviour raises events (triggers); a hand-off between behaviours is flows-to, and a function, having no start, is reached by flows rather than triggered. A business capability is an ability the organization has: business functions and processes realize it, capabilities aggregate narrower capabilities, and software capabilities (product layer) contribute by realizing the business functions behind it. Business services and business capabilities carry the main link to motivation: services realize goals and outcomes, satisfy requirements and deliver value; capabilities support goals and realize outcomes; processes may also realize outcomes and satisfy requirements.\",\n nodeTypes: [\"business.businessactor\", \"business.businesscapability\", \"business.businesscollaboration\", \"business.businessevent\", \"business.businessfunction\", \"business.businessinteraction\", \"business.businessinterface\", \"business.businessobject\", \"business.businessprocess\", \"business.businessrole\", \"business.businessservice\", \"business.contract\", \"business.product\", \"business.representation\"],\n inspiredBy: {\n standard: \"ArchiMate 3.2\",\n version: \"3.2\",\n url: \"https://pubs.opengroup.org/architecture/archimate32-doc/\",\n },\n};\n\nconst LAYER_METADATA_PRODUCT: LayerMetadata = /*#__PURE__*/ {\n id: \"product\",\n number: 3,\n name: \"Product Layer\",\n description: \"Frames the system from a product-management point of view: the personas it serves, the software capabilities it must possess, the features that deliver them, the user workflows that exercise them and the milestones that schedule delivery. It adapts the ArchiMate 3.2 strategy vocabulary rather than adopting it: a software capability is an ability of the software platform, not ArchiMate's Capability, which is the organization's ability and is modelled as business.businesscapability. Product elements describe what the software offers and to whom, never how it is built. Modelling rules: realization runs upward through product. Application and technology services realize software capabilities and features, views realize features, and navigation flows and flow steps realize user workflows and their steps; product elements in turn realize business behaviour, a software capability realizing the business function it carries out and a user workflow the business process the user performs. A feature realizes the software capabilities it exercises; software capabilities aggregate narrower capabilities, and capabilities and features may depend on their own kind. Features and user workflows serve the personas they are designed for; a persona describes a kind of person, so it references the stakeholder and business role it stands for rather than realizing or serving them. A user workflow composes its steps, steps flow to steps, and each step uses the features it exercises; a workflow reaches features and software capabilities only through its steps. Software capabilities support goals; software capabilities and features satisfy requirements; features deliver value and workflows deliver outcomes. Software capabilities and features are scheduled for milestones, and milestones precede milestones.\",\n nodeTypes: [\"product.softwarecapability\", \"product.feature\", \"product.milestone\", \"product.persona\", \"product.userworkflow\", \"product.workflowstep\"],\n inspiredBy: {\n standard: \"ArchiMate 3.2 Strategy Extension + Product Management Practice\",\n version: \"3.2\",\n url: \"https://pubs.opengroup.org/architecture/archimate32-doc/\",\n },\n};\n\nconst LAYER_METADATA_SECURITY: LayerMetadata = /*#__PURE__*/ {\n id: \"security\",\n number: 4,\n name: \"Security Layer\",\n description: \"Defines how the system identifies, authorizes and protects: authentication configuration, roles, permissions, secure resources and their operations, access conditions and field-level controls, declarative policies and rules, data classification and rate limits, together with goal-oriented security concepts such as actors, objectives, delegations, threats, countermeasures and accountability (NIST SP 800-53 controls with STS-ml and XACML-style policy modelling). Code that checks identity or enforces permissions is evidence for elements here. Modelling rules: the security model composes its authentication configuration, constraints container and policies, and aggregates the shared elements (actors, roles, permissions, secure resources, information entities, delegations, threats, classifications and accountability requirements); a policy composes its rules, and a secure resource composes its operations and field access controls. Actors are assigned to roles, roles aggregate permissions and specialize a parent role, and permissions authorize resource operations; access follows that chain. An authentication configuration authenticates actors, uses its password policy and protects resources. A policy rule uses the conditions it evaluates, protects its target, authorizes permissions, triggers its policy actions and generates evidence; conditions and actions do not constrain or trigger on their own. Policies (security, password, retention and data classification) mandate the countermeasures they call for, and only countermeasures mitigate threats. A threat targets resources, information entities and business processes and services, influences classifications and policies, and references the motivation driver it gives rise to. Audit configurations, policy rules and delegations generate evidence; an audit configuration monitors resources and satisfies accountability requirements, and a retention policy governs the audit trails, evidence and information it keeps. A data classification governs the information entities, secure resources and retention policies it labels; field access controls are constrained by it, and data elements in other layers reference it. Separation of duty, binding of duty and need to know constrain roles, permissions and operations; the constraints container only groups them, and other layers link to the individual rule they follow. Validation rules constrain field values; they do not decide access.\",\n nodeTypes: [\"security.accesscondition\", \"security.accountabilityrequirement\", \"security.actor\", \"security.auditconfig\", \"security.authenticationconfig\", \"security.bindingofduty\", \"security.condition\", \"security.countermeasure\", \"security.dataclassification\", \"security.delegation\", \"security.evidence\", \"security.fieldaccesscontrol\", \"security.informationentity\", \"security.informationright\", \"security.needtoknow\", \"security.passwordpolicy\", \"security.permission\", \"security.policyaction\", \"security.policyrule\", \"security.resourceoperation\", \"security.retentionpolicy\", \"security.role\", \"security.secureresource\", \"security.securityconstraints\", \"security.securitymodel\", \"security.securitypolicy\", \"security.separationofduty\", \"security.threat\", \"security.validationrule\"],\n inspiredBy: {\n standard: \"NIST SP 800-53\",\n version: \"5.1\",\n url: \"https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-53r5.pdf\",\n },\n};\n\nconst LAYER_METADATA_APPLICATION: LayerMetadata = /*#__PURE__*/ {\n id: \"application\",\n number: 5,\n name: \"Application Layer\",\n 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).\",\n nodeTypes: [\"application.applicationcollaboration\", \"application.applicationcomponent\", \"application.applicationevent\", \"application.applicationfunction\", \"application.applicationinteraction\", \"application.applicationinterface\", \"application.applicationprocess\", \"application.applicationservice\", \"application.dataobject\"],\n inspiredBy: {\n standard: \"ArchiMate 3.2\",\n version: \"3.2\",\n url: \"https://pubs.opengroup.org/architecture/archimate32-doc/\",\n },\n};\n\nconst LAYER_METADATA_TECHNOLOGY: LayerMetadata = /*#__PURE__*/ {\n id: \"technology\",\n number: 6,\n name: \"Technology Layer\",\n description: \"Models the infrastructure and platform the application runs on: nodes and devices, system software and runtimes, frameworks, communication networks and paths, technology services, interfaces, functions and processes, and the artifacts that are deployed to them (ArchiMate 3.2 technology layer). Package manifests, container images, deployment descriptors and infrastructure-as-code are the usual evidence. Modelling rules: nodes compose their devices, system software, interfaces and the artifacts deployed to them; nodes and system software are assigned to the functions and processes they perform, and a collaboration aggregates the nodes, system software and nested collaborations that cooperate in it and is assigned to its interactions. System software provides the interfaces it declares; an interface is assigned to the technology services it offers and serves the behaviour that uses it. Functions, processes and interactions realize technology services, and a node, system software, collaboration, path or network may realize one directly; a hand-off between behaviours is flows-to; events trigger behaviour, behaviour and services raise events, and structure does not trigger. Artifacts are passive: behaviour and system software access them, and they realize the system software they install and the application components they package, such as a container image. A communication network realizes the paths over it, and networks and paths connect the nodes and devices on them; other elements reach a network through the node they run on. Technology services serve nodes, other services and the application (components, services and functions); a node, device or system software may serve an application component directly as a shortcut for hosting it. Technology reaches the business layer through the application layer. Services carry the link to motivation: they realize goals and software capabilities and satisfy requirements; structure satisfies requirements, constraints and principles. Other layers reach technology in two ways: platform services serve the API, UX, APM, navigation and data-store elements that use them, and an element built on or run by a software product depends on that system software (a data-store database also depends on its node).\",\n nodeTypes: [\"technology.artifact\", \"technology.communicationnetwork\", \"technology.device\", \"technology.node\", \"technology.path\", \"technology.systemsoftware\", \"technology.technologycollaboration\", \"technology.technologyevent\", \"technology.technologyfunction\", \"technology.technologyinteraction\", \"technology.technologyinterface\", \"technology.technologyprocess\", \"technology.technologyservice\"],\n inspiredBy: {\n standard: \"ArchiMate 3.2\",\n version: \"3.2\",\n url: \"https://pubs.opengroup.org/architecture/archimate32-doc/\",\n },\n};\n\nconst LAYER_METADATA_API: LayerMetadata = /*#__PURE__*/ {\n id: \"api\",\n number: 7,\n name: \"API Layer\",\n description: \"Describes the HTTP API surface the application exposes or consumes: the API document and its servers, paths and operations, parameters, request bodies and responses, media types, headers, links and callbacks, reusable components and schemas, security schemes and webhooks (OpenAPI 3.0). Route handlers, controllers and generated API clients are evidence for elements here; the application behaviour behind an operation belongs to the application layer. Modelling rules: each API object links only to what its OpenAPI 3.0 fields hold, and every nesting in the document tree is composes: the document composes its info, paths, components, servers and tags; paths compose path items, and a path item composes its operations, parameters and servers; an operation composes its parameters, request body, responses map, callbacks and servers; the responses map composes its responses, and a response composes its headers, media types and links; a media type composes its schema, examples and encodings; a server composes its variables, a security scheme its OAuth flows, and components their reusable entries. Reuse through $ref is references, and allOf inheritance is specializes. A rate limit, which OpenAPI does not define, governs the operations, path items and servers it caps, triggers its 429 response, references the headers and security scheme it counts by, and realizes its countermeasure. An operation realizes the application function it exposes and references its application service, and a document realizes its application service; the API reaches the business layer through the application layer. A security scheme realizes the security policy it applies, requires permissions and references the secure resource it protects. API schemas reach data stores and business objects through the data-model schemas that map to them. An operation satisfies requirements and constraints, supports the goals and outcomes it contributes to, and realizes the countermeasures it implements.\",\n nodeTypes: [\"api.callback\", \"api.components\", \"api.contact\", \"api.encoding\", \"api.example\", \"api.externaldocumentation\", \"api.header\", \"api.info\", \"api.license\", \"api.link\", \"api.mediatype\", \"api.oauthflow\", \"api.oauthflows\", \"api.openapidocument\", \"api.operation\", \"api.parameter\", \"api.pathitem\", \"api.ratelimit\", \"api.paths\", \"api.requestbody\", \"api.response\", \"api.responses\", \"api.schema\", \"api.securityscheme\", \"api.server\", \"api.servervariable\", \"api.tag\"],\n inspiredBy: {\n standard: \"OpenAPI 3.0\",\n version: \"3.0\",\n url: \"https://spec.openapis.org/oas/v3.0.0\",\n },\n};\n\nconst LAYER_METADATA_DATA_MODEL: LayerMetadata = /*#__PURE__*/ {\n id: \"data-model\",\n number: 8,\n name: \"Data Model Layer\",\n description: \"Defines the logical data model: object schemas and their properties, enumerations, validation rules and the relationships between entities, independent of any particular storage technology (JSON Schema Draft 7). Entity classes, ORM models, DTO and record types, and type definitions that describe domain data are evidence for elements here; how that data is persisted belongs to the data-store layer. Modelling rules: data-model elements are passive structure; they are realized, accessed, referenced and mapped, and never serve, trigger or perform behaviour. A subschema written in place is part of what declares it (composes): a schema document composes its root schema and the definitions declared in it, an object schema composes its properties, an array schema its inline item schema, a composition its inline branches, and a property the value constraints it carries. A type declared elsewhere and reached by $ref or by name is referenced (references): a property references the object schema or definition its value takes, an array or composition references a named definition, and a Reference references the definition, object schema or document it points at. Subtyping is specializes. An entity class, an ORM model whatever the framework, or a type whose shape is published as a schema is an object schema; an in-code structure that only carries data between parts of the program is an application data object, which an object schema may realize. Object schemas and definitions realize the application data objects and business objects they give form to (a direct link to the business object is a shortcut through the data object), and map to their counterparts in other layers (maps-to): API schemas, request bodies, responses and parameters, and data-store collections. Behaviour reaches data by accessing it: application functions, components and events access object schemas and definitions, and business behaviour accesses the business objects they realize; a schema does not reference the behaviour that uses it. Schemas satisfy the requirements and constraints that govern the data but do not realize goals. The model is independent of technology: it does not depend on system software or use technology services, and the file that holds a schema document maps to a technology artifact.\",\n nodeTypes: [\"data-model.arrayschema\", \"data-model.jsonschema\", \"data-model.numericschema\", \"data-model.objectschema\", \"data-model.reference\", \"data-model.schemacomposition\", \"data-model.schemadefinition\", \"data-model.schemaproperty\", \"data-model.stringschema\"],\n inspiredBy: {\n standard: \"JSON Schema Draft 7\",\n version: \"Draft 7\",\n url: \"https://json-schema.org/draft-07/\",\n },\n};\n\nconst LAYER_METADATA_DATA_STORE: LayerMetadata = /*#__PURE__*/ {\n id: \"data-store\",\n number: 9,\n name: \"Data Store Layer\",\n description: \"Describes physical persistence: databases and schemas, tables and collections, columns and fields, indexes, constraints, views, migrations, access patterns and the queries that read and write them (ISO/IEC 9075 SQL with extensions for document, key-value and graph paradigms). Migration scripts, table definitions and repository or DAO code that talks to storage are evidence for elements here. Modelling rules: containment is one level at a time: a database composes namespaces, or collections and views directly when the engine has none; a namespace composes collections, views, stored logic and nested namespaces; a collection composes its fields, indexes, validation rules and event handlers, and may compose partitions. Stored data is passive: collections, views, fields and databases are accessed, referenced and mapped, and never serve or trigger; application components, functions and services access the collections and views they read and write. Behaviour inside the store is stored logic, event handlers and access patterns: event handlers are attached to a collection, reference the fields they watch and trigger stored logic; stored logic accesses collections, triggers other stored logic and refreshes views; access patterns access a collection, use indexes and reference the fields in their key and filter conditions, and serve the application functions that issue them. Validation rules reference the fields they constrain, and a foreign key cascades to the collection it references. Views derive from collections and views; retention policies govern collections and namespaces, archive to collections and trigger the stored logic that purges them. Across layers, the store reaches the business through the application layer and the data model: stored logic realizes application functions, event handlers trigger application events, object schemas map to collections, and a collection may realize a business object as a shortcut; a view maps to the API response it backs.\",\n nodeTypes: [\"data-store.accesspattern\", \"data-store.collection\", \"data-store.database\", \"data-store.eventhandler\", \"data-store.field\", \"data-store.index\", \"data-store.namespace\", \"data-store.retentionpolicy\", \"data-store.storedlogic\", \"data-store.validationrule\", \"data-store.view\"],\n inspiredBy: {\n standard: \"ISO/IEC 9075 (SQL) + Paradigm Extensions\",\n version: \"2024\",\n url: \"https://en.wikipedia.org/wiki/Database_model\",\n },\n};\n\nconst LAYER_METADATA_UX: LayerMetadata = /*#__PURE__*/ {\n id: \"ux\",\n number: 10,\n name: \"UX Layer\",\n description: \"Models the user interface: views and screens, library components and their application-specific instances, forms, action and state patterns, component properties and the visual hierarchy they compose (HTML 5.3 vocabulary with component-library conventions). Rendered components, templates and view classes are evidence for elements here; the logic they call belongs to the application layer and the paths that reach them to the navigation layer. Modelling rules: placement is composition. A view composes its sub-views, component instances and action components; a sub-view or library sub-view composes its instances; an instance composes its nested instances, action components, slot references, chart series and table columns, and a menu composes its entries. A UX library aggregates its library components and sub-views, and a library component composes the components and slot references it is built from; an instance or placed sub-view realizes the library definition it places, and a slot reference references the component that fills it. Elements apply their layout configuration; state transitions, state patterns and action patterns use transition templates, which describe motion only. A state pattern aggregates its states; a state composes its outgoing transitions, a transition flows to its destination state, states and transitions trigger state actions, and a state action realizes its template. An action pattern governs the action components it is applied to. A view, sub-view, component instance or action component binds to its data configuration, which maps to the API or data-model data it reads; chart series and table columns bind through their component. Elements use their error configuration. A view realizes the application interface it presents and the product feature it delivers; an action component triggers the API operation or application behaviour it starts. UX does not access stores, operations or services directly, and reaches the business layer through the application interfaces and features it realizes: a view serves the business role it is for and references the business object it shows. A view supports the goals and outcomes it contributes to, and UX elements satisfy requirements and principles.\",\n nodeTypes: [\"ux.actioncomponent\", \"ux.actionpattern\", \"ux.chartseries\", \"ux.componentinstance\", \"ux.componentreference\", \"ux.dataconfig\", \"ux.errorconfig\", \"ux.experiencestate\", \"ux.layoutconfig\", \"ux.librarycomponent\", \"ux.librarysubview\", \"ux.stateaction\", \"ux.stateactiontemplate\", \"ux.statepattern\", \"ux.statetransition\", \"ux.subview\", \"ux.tablecolumn\", \"ux.transitiontemplate\", \"ux.uxapplication\", \"ux.uxlibrary\", \"ux.uxspec\", \"ux.view\"],\n inspiredBy: {\n standard: \"HTML 5.3\",\n version: \"5.3\",\n url: \"https://html.spec.whatwg.org/\",\n },\n};\n\nconst LAYER_METADATA_NAVIGATION: LayerMetadata = /*#__PURE__*/ {\n id: \"navigation\",\n number: 11,\n name: \"Navigation Layer\",\n description: \"Describes how a user moves through the application: routes and route parameters, navigation flows and their steps, guards and redirects, menus, deep links and the transitions between views (single-page-application navigation patterns). Router configuration and route tables are the usual evidence; the views reached belong to the UX layer and server-side HTTP endpoints to the API layer. Modelling rules: a navigation graph composes its routes and transitions and aggregates its flows, guards and breadcrumb configurations; a route composes its route meta and may contain child routes; a flow composes its steps and aggregates the context variables it carries. A transition leaves its source route (the route flows to it) and navigates to its destination route; a flow step navigates to its route, and a guard action redirects by navigating to a route. A guard evaluates its condition, triggers its action on denial and protects what it guards (routes, transitions, flows and flow steps); the condition and the action do not link to each other. Context variables are passive state: the steps, guards, conditions, actions and transitions that read or write them access them, and their value types map to data-model schema properties or reference data objects and schema documents. A breadcrumb configuration references the route meta it reads labels from, its home route and the flows it shows progress for. Across layers, a route maps to the UX view it renders and may lazy-load or depend on application components; routes, steps and guards use application services, access the data-model schemas they load or check, and are served by the API operations they call; they never reach the data store directly. Navigation reaches the business and motivation layers through the product user workflows and workflow steps that flows and steps realize, and satisfies requirements, constraints and principles.\",\n nodeTypes: [\"navigation.breadcrumbconfig\", \"navigation.contextvariable\", \"navigation.flowstep\", \"navigation.guardaction\", \"navigation.guardcondition\", \"navigation.navigationflow\", \"navigation.navigationgraph\", \"navigation.navigationguard\", \"navigation.navigationtransition\", \"navigation.route\", \"navigation.routemeta\"],\n inspiredBy: {\n standard: \"SPA Navigation Patterns\",\n version: \"1.0\",\n url: \"https://www.w3.org/TR/navigation-timing-2/\",\n },\n};\n\nconst LAYER_METADATA_APM: LayerMetadata = /*#__PURE__*/ {\n id: \"apm\",\n number: 12,\n name: \"APM Observability Layer\",\n description: \"Defines how the system is observed in operation: instrumentation and telemetry configuration, metrics, spans and traces, logs, alerts, dashboards and service-level objectives, with the resources and attributes that describe them (OpenTelemetry 1.0). Logging, metrics and tracing code, exporters and alerting rules are evidence for elements here. Modelling rules: a resource identifies the producing entity: it aggregates the instrumentation scopes running in it, maps to the application component it describes and references its node and system software. A scope aggregates the spans, metric instruments and log records emitted under it, which inherit the resource through it; a span composes its events and aggregates its links. Trace, metric and log configurations (providers) depend on the resource they are built with and aggregate their processors and exporters; they configure telemetry and do not emit, serve or monitor it. An instrumentation configuration monitors the library or code it instruments and references the scope it emits under. Each signal flows through its own processors to exporters, and an exporter accesses the storage it writes to and is served by the technology service it sends to; signals of different kinds are correlated by references (a log record to its span, a metric's exemplars to spans, a span link to its span), not by flow. Only signals and instrumentation configurations monitor elements in other layers; alerts and dashboards monitor signals, and a dashboard references the alerts it shows. Telemetry reaches the business layer only through business KPIs, metric instruments that monitor business processes and services; a metric that tracks an outcome measures it, and telemetry satisfies requirements and constraints.\",\n nodeTypes: [\"apm.alert\", \"apm.dashboard\", \"apm.exporterconfig\", \"apm.instrumentationconfig\", \"apm.instrumentationscope\", \"apm.logconfiguration\", \"apm.logprocessor\", \"apm.logrecord\", \"apm.metricconfiguration\", \"apm.metricinstrument\", \"apm.resource\", \"apm.span\", \"apm.spanevent\", \"apm.spanlink\", \"apm.traceconfiguration\"],\n inspiredBy: {\n standard: \"OpenTelemetry\",\n version: \"1.0\",\n url: \"https://opentelemetry.io/\",\n },\n};\n\nconst LAYER_METADATA_TESTING: LayerMetadata = /*#__PURE__*/ {\n id: \"testing\",\n number: 13,\n name: \"Testing Layer\",\n description: \"Describes how the system is verified: test strategies and plans, suites and cases, fixtures and test data, mocks and stubs, coverage targets and summaries, and the environments tests run in (IEEE 829-2008 test documentation). Test files, fixtures and test configuration are evidence for elements here; the production code under test belongs to the layer it implements. Modelling rules: each testing type has one composing parent. A test coverage model composes its coverage targets, input space partitions, context variations, environment factors, exclusions and coverage summary; a coverage target composes its target input fields, outcome categories, coverage requirements and test case sketches; a coverage requirement composes its input partition selections; a partition composes its values; a test case sketch composes its input selections. A test case sketch validates the one coverage requirement it exercises and references the context variation and outcome category it combines; each input selection references the partition value it picks. A coverage requirement references the context variations and outcome categories it needs, and reaches partition values only through its selections. A target input field references its partition and the field under test (an API parameter, schema property or UX component), so partitions stay reusable across fields; a selection references the values it picks, and a partition dependency references its trigger value and the partition it affects. Summaries report and never validate: a coverage summary aggregates the per-target summaries, a target coverage summary references its target, and both reference the gaps and exclusions they count. Gaps and exclusions reference the requirement or target they concern, and an exclusion references the gap it waives. Context variations reference the environment factors they fix, and environment factors reference only technology nodes and system software. A coverage target covers the production artifact it names; a test case sketch tests what it exercises, requires the software it runs on and accesses the stores holding its fixture data; the model covers only the application component, UX application or API document it is for. Requirements and summaries reach no other layer. The model carries the plan-level motivation links (it supports goals, satisfies principles, constraints and requirements, and measures outcomes), and test case sketches satisfy the requirements they verify.\",\n nodeTypes: [\"testing.contextvariation\", \"testing.coverageexclusion\", \"testing.coveragegap\", \"testing.coveragerequirement\", \"testing.coveragesummary\", \"testing.environmentfactor\", \"testing.inputpartitionselection\", \"testing.inputselection\", \"testing.inputspacepartition\", \"testing.outcomecategory\", \"testing.partitiondependency\", \"testing.partitionvalue\", \"testing.targetcoveragesummary\", \"testing.targetinputfield\", \"testing.testcasesketch\", \"testing.testcoveragemodel\", \"testing.testcoveragetarget\"],\n inspiredBy: {\n standard: \"IEEE 829-2008\",\n version: \"2008\",\n url: \"https://en.wikipedia.org/wiki/IEEE_829\",\n },\n};\n\n/**\n * All 13 layers with metadata, indexed by layer ID\n */\nexport const LAYERS: Map<string, LayerMetadata> = /*#__PURE__*/ new Map([\n [\"motivation\", LAYER_METADATA_MOTIVATION],\n [\"business\", LAYER_METADATA_BUSINESS],\n [\"product\", LAYER_METADATA_PRODUCT],\n [\"security\", LAYER_METADATA_SECURITY],\n [\"application\", LAYER_METADATA_APPLICATION],\n [\"technology\", LAYER_METADATA_TECHNOLOGY],\n [\"api\", LAYER_METADATA_API],\n [\"data-model\", LAYER_METADATA_DATA_MODEL],\n [\"data-store\", LAYER_METADATA_DATA_STORE],\n [\"ux\", LAYER_METADATA_UX],\n [\"navigation\", LAYER_METADATA_NAVIGATION],\n [\"apm\", LAYER_METADATA_APM],\n [\"testing\", LAYER_METADATA_TESTING]\n]);\n\n/**\n * All 13 layers with metadata, indexed by layer number for O(1) lookup\n */\nexport const LAYERS_BY_NUMBER: Map<number, LayerMetadata> = /*#__PURE__*/ new Map([\n [1, LAYER_METADATA_MOTIVATION],\n [2, LAYER_METADATA_BUSINESS],\n [3, LAYER_METADATA_PRODUCT],\n [4, LAYER_METADATA_SECURITY],\n [5, LAYER_METADATA_APPLICATION],\n [6, LAYER_METADATA_TECHNOLOGY],\n [7, LAYER_METADATA_API],\n [8, LAYER_METADATA_DATA_MODEL],\n [9, LAYER_METADATA_DATA_STORE],\n [10, LAYER_METADATA_UX],\n [11, LAYER_METADATA_NAVIGATION],\n [12, LAYER_METADATA_APM],\n [13, LAYER_METADATA_TESTING]\n]);\n\n/**\n * Layer hierarchy - ordered array of layer numbers for reference validation\n */\nexport const LAYER_HIERARCHY: readonly number[] = /*#__PURE__*/ [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] as const;\n\n/**\n * Get layer metadata by layer number (1-13)\n */\nexport function getLayerByNumber(n: number): LayerMetadata | undefined {\n return LAYERS_BY_NUMBER.get(n);\n}\n\n/**\n * Get layer metadata by canonical layer ID\n */\nexport function getLayerById(id: string): LayerMetadata | undefined {\n return LAYERS.get(id);\n}\n\n/**\n * Check if a layer ID is valid\n */\nexport function isValidLayer(id: string): boolean {\n return LAYERS.has(id);\n}\n\n/**\n * Get all valid node types for a layer\n */\nexport function getNodeTypesForLayer(layerId: string): string[] {\n const layer = LAYERS.get(layerId);\n return layer ? layer.nodeTypes : [];\n}\n\n/**\n * Get all canonical layer IDs in numeric order\n */\nexport function getAllLayerIds(): string[] {\n return Array.from(LAYERS.values())\n .sort((a, b) => a.number - b.number)\n .map((l) => l.id);\n}\n\n/**\n * Get all layers in numeric order\n */\nexport function getAllLayers(): LayerMetadata[] {\n return Array.from(LAYERS.values()).sort((a, b) => a.number - b.number);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|