@documentation-robotics/cli 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +18 -17
  2. package/dist/audit/nodes/ai/prompts.js +1 -0
  3. package/dist/audit/nodes/ai/prompts.js.map +2 -2
  4. package/dist/audit/relationships/ai/prompts.js +20 -29
  5. package/dist/audit/relationships/ai/prompts.js.map +2 -2
  6. package/dist/audit/relationships/analysis/gap-analyzer.js.map +1 -1
  7. package/dist/audit/relationships/analysis/layer-templates.js +36 -0
  8. package/dist/audit/relationships/analysis/layer-templates.js.map +2 -2
  9. package/dist/cli.js +8 -8
  10. package/dist/cli.js.map +1 -1
  11. package/dist/commands/reports.js +3 -3
  12. package/dist/commands/reports.js.map +1 -1
  13. package/dist/commands/show.js.map +1 -1
  14. package/dist/commands/upgrade.js +1 -1
  15. package/dist/commands/upgrade.js.map +1 -1
  16. package/dist/commands/validate.js.map +1 -1
  17. package/dist/commands/version.js +1 -1
  18. package/dist/commands/visualize.js +2 -8
  19. package/dist/commands/visualize.js.map +2 -2
  20. package/dist/core/layers.js +1 -0
  21. package/dist/core/layers.js.map +2 -2
  22. package/dist/core/migration-registry.js +59 -2
  23. package/dist/core/migration-registry.js.map +2 -2
  24. package/dist/core/model.js +3 -16
  25. package/dist/core/model.js.map +2 -2
  26. package/dist/core/spec-loader.js.map +1 -1
  27. package/dist/core/stats-collector.js +2 -0
  28. package/dist/core/stats-collector.js.map +2 -2
  29. package/dist/export/archimate-exporter.js.map +2 -2
  30. package/dist/export/json-schema-exporter.js.map +1 -1
  31. package/dist/export/markdown-exporter.js.map +1 -1
  32. package/dist/export/markdown-utils.js +1 -0
  33. package/dist/export/markdown-utils.js.map +2 -2
  34. package/dist/export/mermaid-markdown-exporter.js.map +1 -1
  35. package/dist/export/openapi-exporter.js.map +1 -1
  36. package/dist/export/plantuml-exporter.js.map +1 -1
  37. package/dist/export/report-formatters.js +2 -2
  38. package/dist/export/report-formatters.js.map +1 -1
  39. package/dist/export/types.js +1 -0
  40. package/dist/export/types.js.map +2 -2
  41. package/dist/generated/layer-registry.js +44 -31
  42. package/dist/generated/layer-registry.js.map +2 -2
  43. package/dist/generated/layer-types.js +1 -1
  44. package/dist/generated/layer-types.js.map +2 -2
  45. package/dist/generated/node-types.js +45 -0
  46. package/dist/generated/node-types.js.map +2 -2
  47. package/dist/generated/relationship-index.js +201 -19
  48. package/dist/generated/relationship-index.js.map +2 -2
  49. package/dist/import/archimate-importer.js.map +1 -1
  50. package/dist/import/openapi-importer.js.map +1 -1
  51. package/dist/integrations/claude_code/agents/dr-advisor.md +14 -13
  52. package/dist/integrations/claude_code/agents/dr-extractor.md +2 -2
  53. package/dist/integrations/claude_code/commands/dr-info.md +1 -1
  54. package/dist/integrations/claude_code/commands/dr-init.md +3 -3
  55. package/dist/integrations/claude_code/commands/dr-map.md +2 -2
  56. package/dist/integrations/claude_code/commands/dr-model.md +1 -1
  57. package/dist/integrations/claude_code/commands/dr-relate.md +14 -4
  58. package/dist/integrations/claude_code/docs/END_TO_END_WALKTHROUGH.md +3 -3
  59. package/dist/integrations/claude_code/docs/QUICK_START.md +1 -1
  60. package/dist/integrations/claude_code/docs/README.md +2 -2
  61. package/dist/integrations/claude_code/skills/dr_01_motivation_layer/SKILL.md +2 -2
  62. package/dist/integrations/claude_code/skills/dr_03_product_layer/SKILL.md +679 -0
  63. package/dist/integrations/claude_code/skills/{dr_08_dataset_layer → dr_09_dataset_layer}/SKILL.md +1 -1
  64. package/dist/integrations/claude_code/skills/dr_engineering_guide/SKILL.md +2 -2
  65. package/dist/integrations/github_copilot/agents/dr-advisor.md +14 -13
  66. package/dist/integrations/github_copilot/agents/dr-architect.md +15 -14
  67. package/dist/integrations/github_copilot/skills/dr_01_motivation_layer/SKILL.md +2 -2
  68. package/dist/integrations/github_copilot/skills/dr_03_product_layer/SKILL.md +253 -0
  69. package/dist/reports/model-report-orchestrator.js +3 -3
  70. package/dist/reports/model-report-orchestrator.js.map +1 -1
  71. package/dist/schemas/bundled/analyzers/cbm.json +2 -2
  72. package/dist/schemas/bundled/analyzers/manifest.json +2 -2
  73. package/dist/schemas/bundled/api.json +3 -3
  74. package/dist/schemas/bundled/apm.json +3 -3
  75. package/dist/schemas/bundled/application.json +3 -3
  76. package/dist/schemas/bundled/base.json +29 -1
  77. package/dist/schemas/bundled/business.json +1 -1
  78. package/dist/schemas/bundled/data-model.json +3 -3
  79. package/dist/schemas/bundled/data-store.json +3 -3
  80. package/dist/schemas/bundled/manifest.json +20 -13
  81. package/dist/schemas/bundled/motivation.json +1 -1
  82. package/dist/schemas/bundled/navigation.json +3 -3
  83. package/dist/schemas/bundled/product.json +469 -0
  84. package/dist/schemas/bundled/security.json +3 -3
  85. package/dist/schemas/bundled/technology.json +3 -3
  86. package/dist/schemas/bundled/testing.json +3 -3
  87. package/dist/schemas/bundled/ux.json +3 -3
  88. package/dist/server/server.js +148 -101
  89. package/dist/server/server.js.map +2 -2
  90. package/dist/server-entry.js.map +2 -2
  91. package/dist/telemetry/index.js +1 -1
  92. package/dist/utils/spec-installer.js +2 -2
  93. package/dist/utils/spec-installer.js.map +1 -1
  94. package/dist/utils/spec-version.js +1 -1
  95. package/dist/utils/spec-version.js.map +1 -1
  96. package/dist/viewer/README.md +6 -6
  97. package/dist/viewer/assets/main-D114QwJo.css +1 -0
  98. package/dist/viewer/assets/main-DyuokeQj.js +81 -0
  99. package/dist/viewer/index.html +2 -2
  100. package/dist/viewer/manifest.json +10 -10
  101. package/dist/viewer/version.json +1 -1
  102. package/package.json +4 -1
  103. package/dist/viewer/assets/main-CY0Xufuj.css +0 -1
  104. package/dist/viewer/assets/main-DtgErnwF.js +0 -81
  105. /package/dist/integrations/claude_code/skills/{dr_03_security_layer → dr_04_security_layer}/SKILL.md +0 -0
  106. /package/dist/integrations/claude_code/skills/{dr_04_application_layer → dr_05_application_layer}/SKILL.md +0 -0
  107. /package/dist/integrations/claude_code/skills/{dr_05_technology_layer → dr_06_technology_layer}/SKILL.md +0 -0
  108. /package/dist/integrations/claude_code/skills/{dr_06_api_layer → dr_07_api_layer}/SKILL.md +0 -0
  109. /package/dist/integrations/claude_code/skills/{dr_07_data_model_layer → dr_08_data_model_layer}/SKILL.md +0 -0
  110. /package/dist/integrations/claude_code/skills/{dr_09_ux_layer → dr_10_ux_layer}/SKILL.md +0 -0
  111. /package/dist/integrations/claude_code/skills/{dr_10_navigation_layer → dr_11_navigation_layer}/SKILL.md +0 -0
  112. /package/dist/integrations/claude_code/skills/{dr_11_apm_layer → dr_12_apm_layer}/SKILL.md +0 -0
  113. /package/dist/integrations/claude_code/skills/{dr_12_testing_layer → dr_13_testing_layer}/SKILL.md +0 -0
  114. /package/dist/integrations/github_copilot/skills/{dr_03_security_layer → dr_04_security_layer}/SKILL.md +0 -0
  115. /package/dist/integrations/github_copilot/skills/{dr_04_application_layer → dr_05_application_layer}/SKILL.md +0 -0
  116. /package/dist/integrations/github_copilot/skills/{dr_05_technology_layer → dr_06_technology_layer}/SKILL.md +0 -0
  117. /package/dist/integrations/github_copilot/skills/{dr_06_api_layer → dr_07_api_layer}/SKILL.md +0 -0
  118. /package/dist/integrations/github_copilot/skills/{dr_07_data_model_layer → dr_08_data_model_layer}/SKILL.md +0 -0
  119. /package/dist/integrations/github_copilot/skills/{dr_08_dataset_layer → dr_09_dataset_layer}/SKILL.md +0 -0
  120. /package/dist/integrations/github_copilot/skills/{dr_09_ux_layer → dr_10_ux_layer}/SKILL.md +0 -0
  121. /package/dist/integrations/github_copilot/skills/{dr_10_navigation_layer → dr_11_navigation_layer}/SKILL.md +0 -0
  122. /package/dist/integrations/github_copilot/skills/{dr_11_apm_layer → dr_12_apm_layer}/SKILL.md +0 -0
  123. /package/dist/integrations/github_copilot/skills/{dr_12_testing_layer → dr_13_testing_layer}/SKILL.md +0 -0
@@ -49,7 +49,7 @@ When ambiguous, ask: "Are you about to start building this, currently building i
49
49
  ### Checklist to Work Through
50
50
 
51
51
  **1. Layer Coverage Check**
52
- Map the proposed change to the 12-layer model:
52
+ Map the proposed change to the 13-layer model:
53
53
 
54
54
  - Which layers are touched? (List them explicitly)
55
55
  - Which layers are conspicuously absent? (e.g., a new service with no APM or security)
@@ -155,7 +155,7 @@ dr schema node <spec-node-id>
155
155
  "Your service should match the ApplicationService spec type, which means: single responsibility, exposes at most one API contract, references exactly one business service."
156
156
 
157
157
  **5. Suggest Implementation Order**
158
- Based on the 12-layer model, suggest bottom-up implementation:
158
+ Based on the 13-layer model, suggest bottom-up implementation:
159
159
 
160
160
  1. Data model / data store first (schema before logic)
161
161
  2. Application service next (business logic)
@@ -16,7 +16,7 @@ You are an expert advisor for **Documentation Robotics** end users, specializing
16
16
  - Best practices for naming, organization, and structure
17
17
 
18
18
  2. **Concept Explanation**: Provide clear explanations of:
19
- - The 12-layer architecture and what each layer represents
19
+ - The 13-layer architecture and what each layer represents
20
20
  - Cross-layer relationship patterns (A, B, C, D)
21
21
  - Intra-layer relationship types (34 semantic predicates)
22
22
  - The purpose and benefits of changesets
@@ -96,7 +96,7 @@ You are an expert advisor for **Documentation Robotics** end users, specializing
96
96
 
97
97
  **Be Precise**: Use correct DR terminology
98
98
 
99
- - 12 layers, not "tiers" or "levels"
99
+ - 13 layers, not "tiers" or "levels"
100
100
  - "Relationships" not "links" (post-v0.8.1)
101
101
  - Specific entity types (not generic terms)
102
102
  - Correct field names and formats
@@ -116,21 +116,22 @@ You are an expert advisor for **Documentation Robotics** end users, specializing
116
116
 
117
117
  ## Key Knowledge Areas
118
118
 
119
- ### The 12-Layer Architecture
119
+ ### The 13-Layer Architecture
120
120
 
121
121
  ```
122
122
  01. Motivation - Goals, principles, requirements, constraints (WHY)
123
123
  02. Business - Capabilities, processes, services, actors (WHAT)
124
- 03. Security - Roles, policies, threats, controls (WHO/PROTECTION)
125
- 04. Application - Components, services, interfaces (HOW)
126
- 05. Technology - Platforms, frameworks, infrastructure (WITH)
127
- 06. API - OpenAPI 3.0.3 specifications (CONTRACTS)
128
- 07. Data Model - JSON Schema Draft 7 structures (STRUCTURE)
129
- 08. Data Store - SQL DDL persistence (STORAGE)
130
- 09. UX - Three-Tier UI architecture (EXPERIENCE)
131
- 10. Navigation - Multi-modal routing (FLOW)
132
- 11. APM - OpenTelemetry observability (MONITORING)
133
- 12. Testing - ISP coverage model (VERIFICATION)
124
+ 03. Product - Personas, capabilities, features, workflows, milestones (PRODUCT)
125
+ 04. Security - Roles, policies, threats, controls (WHO/PROTECTION)
126
+ 05. Application - Components, services, interfaces (HOW)
127
+ 06. Technology - Platforms, frameworks, infrastructure (WITH)
128
+ 07. API - OpenAPI 3.0.3 specifications (CONTRACTS)
129
+ 08. Data Model - JSON Schema Draft 7 structures (STRUCTURE)
130
+ 09. Data Store - SQL DDL persistence (STORAGE)
131
+ 10. UX - Three-Tier UI architecture (EXPERIENCE)
132
+ 11. Navigation - Multi-modal routing (FLOW)
133
+ 12. APM - OpenTelemetry observability (MONITORING)
134
+ 13. Testing - ISP coverage model (VERIFICATION)
134
135
  ```
135
136
 
136
137
  ### Cross-Layer Relationship Patterns
@@ -46,23 +46,24 @@ Unlike specialized agents that do one thing, you understand the **full picture**
46
46
 
47
47
  ## Knowledge Base: DR Specification v0.8.1
48
48
 
49
- ### The 12-Layer Architecture
49
+ ### The 13-Layer Architecture
50
50
 
51
- Documentation Robotics models systems across 12 distinct architectural layers:
51
+ Documentation Robotics models systems across 13 distinct architectural layers:
52
52
 
53
53
  ```
54
54
  01. Motivation - WHY (goals, principles, requirements, constraints)
55
55
  02. Business - WHAT (capabilities, processes, services, actors)
56
- 03. Security - WHO/PROTECTION (actors, roles, policies, threats)
57
- 04. Application - HOW (components, services, interfaces, events)
58
- 05. Technology - WITH (platforms, frameworks, infrastructure)
59
- 06. API - CONTRACTS (OpenAPI 3.0.3 specs - 26 entity types)
60
- 07. Data Model - STRUCTURE (JSON Schema Draft 7 - 17 entity types)
61
- 08. Data Store - PERSISTENCE (SQL DDL - 10 entity types)
62
- 09. UX - EXPERIENCE (Three-Tier Architecture - 26 entity types)
63
- 10. Navigation - FLOW (Multi-Modal routing - 10 entity types)
64
- 11. APM - OBSERVE (OpenTelemetry 1.0+ - 14 entity types)
65
- 12. Testing - VERIFY (ISP Coverage Model - 17 entity types)
56
+ 03. Product - PRODUCT (personas, capabilities, features, workflows, milestones)
57
+ 04. Security - WHO/PROTECTION (actors, roles, policies, threats)
58
+ 05. Application - HOW (components, services, interfaces, events)
59
+ 06. Technology - WITH (platforms, frameworks, infrastructure)
60
+ 07. API - CONTRACTS (OpenAPI 3.0.3 specs - 26 entity types)
61
+ 08. Data Model - STRUCTURE (JSON Schema Draft 7 - 17 entity types)
62
+ 09. Data Store - PERSISTENCE (SQL DDL - 10 entity types)
63
+ 10. UX - EXPERIENCE (Three-Tier Architecture - 26 entity types)
64
+ 11. Navigation - FLOW (Multi-Modal routing - 10 entity types)
65
+ 12. APM - OBSERVE (OpenTelemetry 1.0+ - 14 entity types)
66
+ 13. Testing - VERIFY (ISP Coverage Model - 17 entity types)
66
67
  ```
67
68
 
68
69
  ### Core Principles
@@ -660,7 +661,7 @@ dr changeset abandon <changeset-id>
660
661
  **"What is Documentation Robotics?"**
661
662
 
662
663
  - Architecture-as-data philosophy
663
- - 12-layer separation of concerns
664
+ - 13-layer separation of concerns
664
665
  - Traceability through cross-layer relationships
665
666
  - Standards-based integration
666
667
 
@@ -1520,7 +1521,7 @@ Would you like me to:
1520
1521
  ```
1521
1522
  User: How do I model a microservice?
1522
1523
 
1523
- Agent: Great question! Let me explain how microservices map to DR's 12-layer model.
1524
+ Agent: Great question! Let me explain how microservices map to DR's 13-layer model.
1524
1525
 
1525
1526
  A microservice typically spans multiple layers:
1526
1527
 
@@ -27,7 +27,7 @@ version: 0.8.1
27
27
 
28
28
  ## Layer Overview
29
29
 
30
- The Motivation Layer is the **highest layer** in the 12-layer architecture and provides governance to all other layers. It describes:
30
+ The Motivation Layer is the **highest layer** in the 13-layer architecture and provides governance to all other layers. It describes:
31
31
 
32
32
  - **WHY** - The reasons and drivers behind architectural decisions
33
33
  - **WHO** - Stakeholders with interests in the outcome
@@ -115,7 +115,7 @@ This layer uses **ArchiMate 3.2 Motivation Layer** standard without custom exten
115
115
  | **Layer 4 (Application)** | ApplicationService supports Goals, delivers Value, governed by Principles; ApplicationFunction fulfills Requirements |
116
116
  | **Layer 5 (Technology)** | TechnologyService supports Goals, governed by Principles; Node fulfills Requirements, constrained by Constraints |
117
117
  | **Layer 6 (API)** | Operation supports Goals (x-supports-goals), fulfills Requirements, governed by Principles, constrained by Constraints |
118
- | **Layer 7-12** | All layers can reference Principles, Constraints, Requirements, Goals for governance and traceability |
118
+ | **Layer 7-13** | All layers can reference Principles, Constraints, Requirements, Goals for governance and traceability |
119
119
 
120
120
  **Design Pattern:** Lower layers "look up" to the Motivation layer to justify WHY they exist and WHAT value they deliver.
121
121
 
@@ -0,0 +1,253 @@
1
+ ---
2
+ name: LAYER_03_PRODUCT
3
+ description: Expert knowledge for Product Layer modeling in Documentation Robotics
4
+ triggers:
5
+ [
6
+ "product",
7
+ "feature",
8
+ "persona",
9
+ "capability",
10
+ "milestone",
11
+ "user workflow",
12
+ "product roadmap",
13
+ "product planning",
14
+ "product management"
15
+ ]
16
+ version: 0.8.4
17
+ ---
18
+
19
+ # Product Layer Skill
20
+
21
+ **Layer Number:** 03
22
+ **Specification:** Metadata Model Spec v0.8.4
23
+ **Purpose:** Defines product personas, capabilities, features, user workflows, and milestones that represent what the product does and for whom.
24
+
25
+ ---
26
+
27
+ ## Layer Overview
28
+
29
+ The Product Layer captures the **product management dimension** of architecture:
30
+
31
+ - **WHO** - Personas and target user archetypes
32
+ - **WHAT** - Capabilities and features the product delivers
33
+ - **HOW** - User workflows describing how users accomplish goals
34
+ - **WHEN** - Milestones representing delivery roadmap
35
+ - **WHY** - Linkage to business goals and requirements
36
+
37
+ This layer uses a **custom specification** designed for product planning, prioritization, and user-centric modeling — distinct from Business layer (organization-internal processes) and UX layer (UI/interface design).
38
+
39
+ **Key Innovation:** Bridges strategic intent (Motivation layer) and organizational structure (Business layer) with externally-facing product value planning and delivery.
40
+
41
+ ---
42
+
43
+ ## Entity Types
44
+
45
+ > **CLI Introspection:** Run `dr schema types product` for the authoritative, always-current list of node types.
46
+ > Run `dr schema node <type-id>` for full attribute details on any type.
47
+
48
+ | Entity Type | Description | Key Attributes |
49
+ | ---------------- | ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
50
+ | **Persona** | User archetype with shared goals, behaviors, pain points | category (primary, secondary, served, negative), proficiency (novice, intermediate, advanced, expert) |
51
+ | **Capability** | Product ability independent of implementation | status (proposed, planned, developing, delivered, deprecated), properties |
52
+ | **Feature** | User-visible unit of functionality delivering capabilities | priority (critical, high, medium, low, informational), status, size (xs, s, m, l, xl) |
53
+ | **UserWorkflow** | Sequence of user-facing steps to accomplish a goal | complexity (simple, moderate, complex), properties |
54
+ | **Milestone** | Time-bound delivery target grouping features/capabilities | status (proposed, planned, active, completed, cancelled) |
55
+
56
+ ---
57
+
58
+ ## Intra-Layer Relationships
59
+
60
+ The Product layer models product structure and planning via these core relationships:
61
+
62
+ | Source | Predicate | Destination | Cardinality | Rationale |
63
+ | ---------------------- | --------------- | -------------------- | ------------ | ---------------------------------------------- |
64
+ | `product.capability` | `aggregates` | `product.capability` | many-to-many | Capability decomposition into sub-capabilities |
65
+ | `product.feature` | `realizes` | `product.capability` | many-to-many | Feature delivers a capability |
66
+ | `product.feature` | `serves` | `product.persona` | many-to-many | Feature targets a persona |
67
+ | `product.feature` | `scheduled-for` | `product.milestone` | many-to-many | Feature assigned to delivery milestone |
68
+ | `product.capability` | `scheduled-for` | `product.milestone` | many-to-many | Capability assigned to milestone |
69
+ | `product.userworkflow` | `serves` | `product.persona` | many-to-many | Workflow designed for a persona |
70
+ | `product.userworkflow` | `composes` | `product.feature` | many-to-many | Workflow composed of features |
71
+ | `product.milestone` | `precedes` | `product.milestone` | many-to-many | Milestone sequencing |
72
+ | `product.feature` | `depends-on` | `product.feature` | many-to-many | Feature dependency |
73
+
74
+ ---
75
+
76
+ ## Cross-Layer References
77
+
78
+ ### Outgoing References (Product → Motivation)
79
+
80
+ Product layer references Motivation layer to justify product decisions with strategic goals:
81
+
82
+ | Predicate | Source | Target | Rationale |
83
+ | ---------------- | ------------ | ----------- | -------------------------------------------- |
84
+ | `realizes` | Persona | Stakeholder | Persona concretizes stakeholder archetypes |
85
+ | `satisfies` | Feature | Requirement | Feature satisfies business/user requirements |
86
+ | `supports` | Capability | Goal | Capability supports strategic goals |
87
+ | `delivers` | UserWorkflow | Outcome | Workflow delivers business outcomes |
88
+ | `delivers-value` | Feature | Value | Feature delivers business value |
89
+ | `fulfills` | Capability | Requirement | Capability fulfills requirements |
90
+
91
+ ### Outgoing References (Product → Business)
92
+
93
+ Product layer references Business layer to align with organizational services and roles:
94
+
95
+ | Predicate | Source | Target | Rationale |
96
+ | ------------ | ------------ | ---------------- | --------------------------------------- |
97
+ | `realizes` | Feature | BusinessService | Feature realizes a business service |
98
+ | `aggregates` | UserWorkflow | BusinessProcess | Workflow aggregates business processes |
99
+ | `realizes` | Capability | BusinessFunction | Capability realizes a business function |
100
+ | `serves` | Persona | BusinessRole | Persona is served by a business role |
101
+
102
+ ### Incoming References (Lower Layers → Product)
103
+
104
+ Higher layers (Security through Testing) reference Product layer for feature-level concerns:
105
+
106
+ - Application → Feature: Application components implement features
107
+ - UX → Feature: UI views render features
108
+ - Testing → Feature: Test cases validate features
109
+ - API → Feature: API operations expose features
110
+
111
+ ---
112
+
113
+ ## Persona Definition
114
+
115
+ A Persona is a **user archetype** representing a class of users with shared goals, behaviors, and pain points.
116
+
117
+ **Distinction from Stakeholder (Motivation layer):**
118
+
119
+ - **Stakeholder** - Organizational relationship (internal/external/regulatory/customer)
120
+ - **Persona** - Behavioral archetype with usage patterns and proficiency levels
121
+
122
+ **Categories:**
123
+
124
+ - **Primary** - Core user the product is designed for
125
+ - **Secondary** - Important but not primary user
126
+ - **Served** - User who benefits indirectly
127
+ - **Negative** - User archetype the product explicitly doesn't serve
128
+
129
+ **Proficiency Levels:**
130
+
131
+ - **Novice** - First-time users, minimal technical background
132
+ - **Intermediate** - Recurring users with some experience
133
+ - **Advanced** - Power users with domain expertise
134
+ - **Expert** - Specialists who push product limits
135
+
136
+ ---
137
+
138
+ ## Capability Definition
139
+
140
+ A Capability is an **ability the product possesses**, independent of how it's implemented.
141
+
142
+ **Distinction from BusinessFunction (Business layer):**
143
+
144
+ - **BusinessFunction** - Internal organizational grouping of behavior
145
+ - **Capability** - Externally-facing product ability
146
+
147
+ **Lifecycle Statuses:**
148
+
149
+ - **Proposed** - Idea under evaluation
150
+ - **Planned** - Scheduled for development
151
+ - **Developing** - Currently being built
152
+ - **Delivered** - Implemented and released
153
+ - **Deprecated** - No longer supported
154
+
155
+ ---
156
+
157
+ ## Feature Definition
158
+
159
+ A Feature is a **user-visible unit of functionality** that delivers one or more capabilities and is the primary unit of product planning.
160
+
161
+ **Distinction from Requirement (Motivation layer):**
162
+
163
+ - **Requirement** - What system _must_ do (functional/non-functional/regulatory)
164
+ - **Feature** - Planned unit of value with prioritization, sizing, and lifecycle
165
+
166
+ **Priority Levels:**
167
+
168
+ - **Critical** - Product cannot function without it
169
+ - **High** - Core functionality users expect
170
+ - **Medium** - Valuable enhancement
171
+ - **Low** - Nice-to-have optimization
172
+ - **Informational** - Documentation or informational
173
+
174
+ **Sizing Estimates:**
175
+
176
+ - **XS** - < 1 day of effort
177
+ - **S** - 1–3 days
178
+ - **M** - 1–2 weeks
179
+ - **L** - 2–4 weeks
180
+ - **XL** - > 4 weeks
181
+
182
+ ---
183
+
184
+ ## User Workflow Definition
185
+
186
+ A UserWorkflow is a **sequence of user-facing steps** through the product to accomplish a goal.
187
+
188
+ **Complexity Assessment:**
189
+
190
+ - **Simple** - Linear flow, 2–3 steps, minimal decision points
191
+ - **Moderate** - Multiple branches, 5–10 steps, some conditional logic
192
+ - **Complex** - Many decision points, 10+ steps, cross-system integration
193
+
194
+ ---
195
+
196
+ ## Milestone Definition
197
+
198
+ A Milestone is a **time-bound delivery target** grouping features or capabilities.
199
+
200
+ **Lifecycle Statuses:**
201
+
202
+ - **Proposed** - Candidate milestone under evaluation
203
+ - **Planned** - Scheduled for planning and estimation
204
+ - **Active** - Development underway
205
+ - **Completed** - Released to users
206
+ - **Cancelled** - Postponed or deprioritized
207
+
208
+ ---
209
+
210
+ ## Best Practices
211
+
212
+ 1. **Start with Personas, End with Workflows** - Understand users first, model journeys last
213
+ 2. **Features Deliver Capabilities** - Every feature should map to at least one capability
214
+ 3. **Capabilities Support Goals** - Link capabilities to motivation layer goals for justification
215
+ 4. **Milestones Sequence Logically** - Plan dependencies and prerequisites
216
+ 5. **Workflows are User-Centric** - Name them from the user's perspective
217
+ 6. **Prioritization Reflects Business Value** - Higher priority features deliver more strategic value
218
+ 7. **Link to Business Layer** - Map features to business services to show value realization
219
+
220
+ ---
221
+
222
+ ## Quick Reference
223
+
224
+ **Add Commands:**
225
+
226
+ ```bash
227
+ dr add product persona <name>
228
+ dr add product capability <name>
229
+ dr add product feature <name>
230
+ dr add product user-workflow <name>
231
+ dr add product milestone <name>
232
+ ```
233
+
234
+ **Relationship Commands:**
235
+
236
+ ```bash
237
+ dr relationship add <source> <destination> --predicate <predicate>
238
+ ```
239
+
240
+ **Available Predicates:**
241
+
242
+ - `aggregates` - Capability decomposes into sub-capability
243
+ - `realizes` - Feature/Capability realizes capability/service/function
244
+ - `serves` - Feature/Workflow/Persona serves persona/role
245
+ - `scheduled-for` - Feature/Capability scheduled for milestone
246
+ - `composes` - Workflow composed of features
247
+ - `depends-on` - Feature depends on feature
248
+ - `precedes` - Milestone precedes milestone
249
+ - `satisfies` - Feature satisfies requirement
250
+ - `supports` - Capability supports goal
251
+ - `delivers` - Workflow delivers outcome
252
+ - `delivers-value` - Feature delivers value
253
+ - `fulfills` - Capability fulfills requirement
@@ -16,7 +16,7 @@ class ModelReportOrchestrator {
16
16
  }
17
17
  /**
18
18
  * Regenerate reports for a specific set of affected layers.
19
- * On first invocation or when reports don't exist, regenerates all 12 reports.
19
+ * On first invocation or when reports don't exist, regenerates all 13 reports.
20
20
  * Invalid layer names in the affected set are skipped with a warning.
21
21
  */
22
22
  async regenerate(affectedLayers) {
@@ -31,7 +31,7 @@ class ModelReportOrchestrator {
31
31
  }
32
32
  }
33
33
  /**
34
- * Regenerate all 12 layer reports.
34
+ * Regenerate all 13 layer reports.
35
35
  * Lets mkdir errors propagate so callers can handle them with proper telemetry.
36
36
  */
37
37
  async regenerateAll() {
@@ -54,7 +54,7 @@ class ModelReportOrchestrator {
54
54
  return affected;
55
55
  }
56
56
  /**
57
- * Check if all 12 report files exist and are initialized.
57
+ * Check if all 13 report files exist and are initialized.
58
58
  * Returns false only if files don't exist (ENOENT); propagates other errors like EACCES, EMFILE, EIO.
59
59
  */
60
60
  async isInitialized() {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/reports/model-report-orchestrator.ts"],
4
- "sourcesContent": ["/**\n * Model Report Orchestrator\n *\n * Coordinates report generation across all 12 architecture layers.\n * Determines which reports need regeneration and manages the report directory.\n */\n\nimport type { Model } from '../core/model.js';\nimport { ModelReportDataCollector } from './model-report-data.js';\nimport { ModelLayerReportGenerator } from './model-layer-report-generator.js';\nimport { CANONICAL_LAYER_NAMES, type CanonicalLayerName, getLayerOrder, isValidLayerName } from '../core/layers.js';\nimport { getErrorMessage } from '../utils/errors.js';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\nexport class ModelReportOrchestrator {\n private collector: ModelReportDataCollector;\n private generator: ModelLayerReportGenerator;\n\n constructor(private model: Model, private rootPath: string) {\n this.collector = new ModelReportDataCollector();\n const modelVersion = model.manifest.version || 'unknown';\n const generatedAt = new Date().toISOString();\n this.generator = new ModelLayerReportGenerator(modelVersion, generatedAt);\n }\n\n /**\n * Regenerate reports for a specific set of affected layers.\n * On first invocation or when reports don't exist, regenerates all 12 reports.\n * Invalid layer names in the affected set are skipped with a warning.\n */\n async regenerate(affectedLayers: Set<string>): Promise<void> {\n if (!(await this.isInitialized())) {\n return this.regenerateAll();\n }\n\n for (const layerName of affectedLayers) {\n // Type predicate narrows layerName to CanonicalLayerName automatically\n if (!isValidLayerName(layerName)) {\n console.warn(`Skipping invalid layer name: ${layerName}`);\n continue;\n }\n await this.generateLayerReport(layerName);\n }\n }\n\n /**\n * Regenerate all 12 layer reports.\n * Lets mkdir errors propagate so callers can handle them with proper telemetry.\n */\n async regenerateAll(): Promise<void> {\n // Ensure report directory exists\n const reportDir = this.getReportDir();\n await fs.mkdir(reportDir, { recursive: true });\n\n // Generate all 12 layer reports\n for (const layerName of CANONICAL_LAYER_NAMES) {\n await this.generateLayerReport(layerName);\n }\n }\n\n /**\n * Compute the set of layers affected by a change to a primary layer.\n * Returns the primary layer plus any layers that have cross-layer relationships with it.\n * Throws if the primary layer is not a recognized canonical layer name.\n */\n computeAffectedLayers(primaryLayer: CanonicalLayerName): Set<CanonicalLayerName> {\n // Defense-in-depth: validate despite type signature (guards against as casts from callers)\n if (!isValidLayerName(primaryLayer)) {\n throw new Error(\n `Invalid primary layer name: '${primaryLayer}' is not a recognized canonical layer. ` +\n `Valid layers are: ${CANONICAL_LAYER_NAMES.join(', ')}`\n );\n }\n\n const affected = new Set<CanonicalLayerName>([primaryLayer]);\n\n for (const rel of this.model.relationships.getAll()) {\n // Outbound: this layer references another layer\n if (rel.layer === primaryLayer && rel.targetLayer) {\n // Validate layer name before casting (defensive: guards against user-editable YAML with invalid layer names)\n if (isValidLayerName(rel.targetLayer)) {\n affected.add(rel.targetLayer);\n }\n }\n // Inbound: another layer references this layer\n if (rel.targetLayer === primaryLayer) {\n // Validate layer name before casting (defensive: guards against user-editable YAML with invalid layer names)\n if (isValidLayerName(rel.layer)) {\n affected.add(rel.layer);\n }\n }\n }\n\n return affected;\n }\n\n /**\n * Check if all 12 report files exist and are initialized.\n * Returns false only if files don't exist (ENOENT); propagates other errors like EACCES, EMFILE, EIO.\n */\n private async isInitialized(): Promise<boolean> {\n for (const layerName of CANONICAL_LAYER_NAMES) {\n try {\n await fs.access(this.getReportFilePath(layerName));\n } catch (error: unknown) {\n const err = error as NodeJS.ErrnoException;\n // Only ENOENT (file not found) should return false; other errors propagate\n if (err.code === 'ENOENT') {\n return false;\n }\n // Re-throw permission errors, I/O errors, etc.\n throw error;\n }\n }\n return true;\n }\n\n /**\n * Get the reports directory path.\n */\n private getReportDir(): string {\n return path.join(this.rootPath, 'documentation-robotics', 'reports');\n }\n\n /**\n * Get the full file path for a layer report.\n */\n private getReportFilePath(layerName: CanonicalLayerName): string {\n const layerNumber = getLayerOrder(layerName);\n const paddedNumber = String(layerNumber).padStart(2, '0');\n const filename = `${paddedNumber}-${layerName}-layer-report.md`;\n return path.join(this.getReportDir(), filename);\n }\n\n /**\n * Generate and write a single layer report.\n * Separates concerns to distinguish programming bugs from I/O errors.\n * Lets generation and write errors propagate so callers can handle them with proper telemetry.\n */\n private async generateLayerReport(layerName: CanonicalLayerName): Promise<void> {\n let data;\n let markdown;\n\n try {\n // Collect layer data (may throw if programming bug or model is corrupted)\n data = this.collector.collectLayerData(this.model, layerName);\n\n // Generate markdown report (may throw if programming bug)\n markdown = this.generator.generate(data);\n } catch (error) {\n throw new Error(\n `Failed to generate report content for layer: ${layerName} (programming error or corrupted model) - ${getErrorMessage(error)}`\n );\n }\n\n // Write to file (may throw for I/O errors like ENOSPC, EACCES, EIO)\n // Let write errors propagate so callers can handle them with proper telemetry\n const filePath = this.getReportFilePath(layerName);\n await fs.writeFile(filePath, markdown, 'utf-8');\n }\n}\n"],
4
+ "sourcesContent": ["/**\n * Model Report Orchestrator\n *\n * Coordinates report generation across all 13 architecture layers.\n * Determines which reports need regeneration and manages the report directory.\n */\n\nimport type { Model } from '../core/model.js';\nimport { ModelReportDataCollector } from './model-report-data.js';\nimport { ModelLayerReportGenerator } from './model-layer-report-generator.js';\nimport { CANONICAL_LAYER_NAMES, type CanonicalLayerName, getLayerOrder, isValidLayerName } from '../core/layers.js';\nimport { getErrorMessage } from '../utils/errors.js';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\n\nexport class ModelReportOrchestrator {\n private collector: ModelReportDataCollector;\n private generator: ModelLayerReportGenerator;\n\n constructor(private model: Model, private rootPath: string) {\n this.collector = new ModelReportDataCollector();\n const modelVersion = model.manifest.version || 'unknown';\n const generatedAt = new Date().toISOString();\n this.generator = new ModelLayerReportGenerator(modelVersion, generatedAt);\n }\n\n /**\n * Regenerate reports for a specific set of affected layers.\n * On first invocation or when reports don't exist, regenerates all 13 reports.\n * Invalid layer names in the affected set are skipped with a warning.\n */\n async regenerate(affectedLayers: Set<string>): Promise<void> {\n if (!(await this.isInitialized())) {\n return this.regenerateAll();\n }\n\n for (const layerName of affectedLayers) {\n // Type predicate narrows layerName to CanonicalLayerName automatically\n if (!isValidLayerName(layerName)) {\n console.warn(`Skipping invalid layer name: ${layerName}`);\n continue;\n }\n await this.generateLayerReport(layerName);\n }\n }\n\n /**\n * Regenerate all 13 layer reports.\n * Lets mkdir errors propagate so callers can handle them with proper telemetry.\n */\n async regenerateAll(): Promise<void> {\n // Ensure report directory exists\n const reportDir = this.getReportDir();\n await fs.mkdir(reportDir, { recursive: true });\n\n // Generate all 13 layer reports\n for (const layerName of CANONICAL_LAYER_NAMES) {\n await this.generateLayerReport(layerName);\n }\n }\n\n /**\n * Compute the set of layers affected by a change to a primary layer.\n * Returns the primary layer plus any layers that have cross-layer relationships with it.\n * Throws if the primary layer is not a recognized canonical layer name.\n */\n computeAffectedLayers(primaryLayer: CanonicalLayerName): Set<CanonicalLayerName> {\n // Defense-in-depth: validate despite type signature (guards against as casts from callers)\n if (!isValidLayerName(primaryLayer)) {\n throw new Error(\n `Invalid primary layer name: '${primaryLayer}' is not a recognized canonical layer. ` +\n `Valid layers are: ${CANONICAL_LAYER_NAMES.join(', ')}`\n );\n }\n\n const affected = new Set<CanonicalLayerName>([primaryLayer]);\n\n for (const rel of this.model.relationships.getAll()) {\n // Outbound: this layer references another layer\n if (rel.layer === primaryLayer && rel.targetLayer) {\n // Validate layer name before casting (defensive: guards against user-editable YAML with invalid layer names)\n if (isValidLayerName(rel.targetLayer)) {\n affected.add(rel.targetLayer);\n }\n }\n // Inbound: another layer references this layer\n if (rel.targetLayer === primaryLayer) {\n // Validate layer name before casting (defensive: guards against user-editable YAML with invalid layer names)\n if (isValidLayerName(rel.layer)) {\n affected.add(rel.layer);\n }\n }\n }\n\n return affected;\n }\n\n /**\n * Check if all 13 report files exist and are initialized.\n * Returns false only if files don't exist (ENOENT); propagates other errors like EACCES, EMFILE, EIO.\n */\n private async isInitialized(): Promise<boolean> {\n for (const layerName of CANONICAL_LAYER_NAMES) {\n try {\n await fs.access(this.getReportFilePath(layerName));\n } catch (error: unknown) {\n const err = error as NodeJS.ErrnoException;\n // Only ENOENT (file not found) should return false; other errors propagate\n if (err.code === 'ENOENT') {\n return false;\n }\n // Re-throw permission errors, I/O errors, etc.\n throw error;\n }\n }\n return true;\n }\n\n /**\n * Get the reports directory path.\n */\n private getReportDir(): string {\n return path.join(this.rootPath, 'documentation-robotics', 'reports');\n }\n\n /**\n * Get the full file path for a layer report.\n */\n private getReportFilePath(layerName: CanonicalLayerName): string {\n const layerNumber = getLayerOrder(layerName);\n const paddedNumber = String(layerNumber).padStart(2, '0');\n const filename = `${paddedNumber}-${layerName}-layer-report.md`;\n return path.join(this.getReportDir(), filename);\n }\n\n /**\n * Generate and write a single layer report.\n * Separates concerns to distinguish programming bugs from I/O errors.\n * Lets generation and write errors propagate so callers can handle them with proper telemetry.\n */\n private async generateLayerReport(layerName: CanonicalLayerName): Promise<void> {\n let data;\n let markdown;\n\n try {\n // Collect layer data (may throw if programming bug or model is corrupted)\n data = this.collector.collectLayerData(this.model, layerName);\n\n // Generate markdown report (may throw if programming bug)\n markdown = this.generator.generate(data);\n } catch (error) {\n throw new Error(\n `Failed to generate report content for layer: ${layerName} (programming error or corrupted model) - ${getErrorMessage(error)}`\n );\n }\n\n // Write to file (may throw for I/O errors like ENOSPC, EACCES, EIO)\n // Let write errors propagate so callers can handle them with proper telemetry\n const filePath = this.getReportFilePath(layerName);\n await fs.writeFile(filePath, markdown, 'utf-8');\n }\n}\n"],
5
5
  "mappings": "AAQA,SAAS,gCAAgC;AACzC,SAAS,iCAAiC;AAC1C,SAAS,uBAAgD,eAAe,wBAAwB;AAChG,SAAS,uBAAuB;AAChC,YAAY,QAAQ;AACpB,YAAY,UAAU;AAEhB,MAAO,wBAAuB;EAId;EAAsB;EAHlC;EACA;EAER,YAAoB,OAAsB,UAAgB;AAAtC,SAAA,QAAA,OAAsB,KAAA,WAAA,UACxC,KAAK,YAAY,IAAI,yBAAwB;AAC7C,UAAM,eAAe,MAAM,SAAS,WAAW,WACzC,eAAc,oBAAI,KAAI,GAAG,YAAW;AAC1C,SAAK,YAAY,IAAI,0BAA0B,cAAc,WAAW;EAC1E;;;;;;EAOA,MAAM,WAAW,gBAA2B;AAC1C,QAAI,CAAE,MAAM,KAAK,cAAa;AAC5B,aAAO,KAAK,cAAa;AAG3B,eAAW,aAAa,gBAAgB;AAEtC,UAAI,CAAC,iBAAiB,SAAS,GAAG;AAChC,gBAAQ,KAAK,gCAAgC,SAAS,EAAE;AACxD;MACF;AACA,YAAM,KAAK,oBAAoB,SAAS;IAC1C;EACF;;;;;EAMA,MAAM,gBAAa;AAEjB,UAAM,YAAY,KAAK,aAAY;AACnC,UAAM,GAAG,MAAM,WAAW,EAAE,WAAW,GAAI,CAAE;AAG7C,eAAW,aAAa;AACtB,YAAM,KAAK,oBAAoB,SAAS;EAE5C;;;;;;EAOA,sBAAsB,cAAgC;AAEpD,QAAI,CAAC,iBAAiB,YAAY;AAChC,YAAM,IAAI,MACR,gCAAgC,YAAY,4DACvB,sBAAsB,KAAK,IAAI,CAAC,EAAE;AAI3D,UAAM,WAAW,oBAAI,IAAwB,CAAC,YAAY,CAAC;AAE3D,eAAW,OAAO,KAAK,MAAM,cAAc,OAAM;AAE/C,MAAI,IAAI,UAAU,gBAAgB,IAAI,eAEhC,iBAAiB,IAAI,WAAW,KAClC,SAAS,IAAI,IAAI,WAAW,GAI5B,IAAI,gBAAgB,gBAElB,iBAAiB,IAAI,KAAK,KAC5B,SAAS,IAAI,IAAI,KAAK;AAK5B,WAAO;EACT;;;;;EAMQ,MAAM,gBAAa;AACzB,eAAW,aAAa;AACtB,UAAI;AACF,cAAM,GAAG,OAAO,KAAK,kBAAkB,SAAS,CAAC;MACnD,SAAS,OAAgB;AAGvB,YAFY,MAEJ,SAAS;AACf,iBAAO;AAGT,cAAM;MACR;AAEF,WAAO;EACT;;;;EAKQ,eAAY;AAClB,WAAO,KAAK,KAAK,KAAK,UAAU,0BAA0B,SAAS;EACrE;;;;EAKQ,kBAAkB,WAA6B;AACrD,UAAM,cAAc,cAAc,SAAS,GAErC,WAAW,GADI,OAAO,WAAW,EAAE,SAAS,GAAG,GAAG,CACxB,IAAI,SAAS;AAC7C,WAAO,KAAK,KAAK,KAAK,aAAY,GAAI,QAAQ;EAChD;;;;;;EAOQ,MAAM,oBAAoB,WAA6B;AAC7D,QAAI,MACA;AAEJ,QAAI;AAEF,aAAO,KAAK,UAAU,iBAAiB,KAAK,OAAO,SAAS,GAG5D,WAAW,KAAK,UAAU,SAAS,IAAI;IACzC,SAAS,OAAO;AACd,YAAM,IAAI,MACR,gDAAgD,SAAS,6CAA6C,gBAAgB,KAAK,CAAC,EAAE;IAElI;AAIA,UAAM,WAAW,KAAK,kBAAkB,SAAS;AACjD,UAAM,GAAG,UAAU,UAAU,UAAU,OAAO;EAChD;;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cbm",
3
- "version": "0.8.4",
4
- "source_version": "0.8.4",
3
+ "version": "0.9.0",
4
+ "source_version": "0.9.0",
5
5
  "analyzer": {
6
6
  "name": "cbm",
7
7
  "display_name": "codebase-memory-mcp",
@@ -1,9 +1,9 @@
1
1
  {
2
- "specVersion": "0.8.4",
2
+ "specVersion": "0.9.0",
3
3
  "analyzers": [
4
4
  {
5
5
  "name": "cbm",
6
- "version": "0.8.4"
6
+ "version": "0.9.0"
7
7
  }
8
8
  ]
9
9
  }
@@ -1,10 +1,10 @@
1
1
  {
2
- "specVersion": "0.8.4",
2
+ "specVersion": "0.9.0",
3
3
  "layer": {
4
4
  "id": "api",
5
- "number": 6,
5
+ "number": 7,
6
6
  "name": "API Layer",
7
- "description": "Layer 6: API Layer",
7
+ "description": "Layer 7: API Layer",
8
8
  "inspired_by": {
9
9
  "standard": "OpenAPI 3.0",
10
10
  "version": "3.0",
@@ -1,10 +1,10 @@
1
1
  {
2
- "specVersion": "0.8.4",
2
+ "specVersion": "0.9.0",
3
3
  "layer": {
4
4
  "id": "apm",
5
- "number": 11,
5
+ "number": 12,
6
6
  "name": "APM Observability Layer",
7
- "description": "Layer 11: APM Observability Layer",
7
+ "description": "Layer 12: APM Observability Layer",
8
8
  "inspired_by": {
9
9
  "standard": "OpenTelemetry",
10
10
  "version": "1.0",
@@ -1,10 +1,10 @@
1
1
  {
2
- "specVersion": "0.8.4",
2
+ "specVersion": "0.9.0",
3
3
  "layer": {
4
4
  "id": "application",
5
- "number": 4,
5
+ "number": 5,
6
6
  "name": "Application Layer",
7
- "description": "Layer 4: Application Layer",
7
+ "description": "Layer 5: Application Layer",
8
8
  "inspired_by": {
9
9
  "standard": "ArchiMate 3.2",
10
10
  "version": "3.2",
@@ -1,5 +1,5 @@
1
1
  {
2
- "specVersion": "0.8.4",
2
+ "specVersion": "0.9.0",
3
3
  "schemas": {
4
4
  "spec-node": {
5
5
  "$schema": "http://json-schema.org/draft-07/schema#",
@@ -596,6 +596,7 @@
596
596
  "optimizes",
597
597
  "owns",
598
598
  "performs",
599
+ "precedes",
599
600
  "protects",
600
601
  "provides",
601
602
  "realizes",
@@ -606,6 +607,7 @@
606
607
  "requires",
607
608
  "resolves-with",
608
609
  "satisfies",
610
+ "scheduled-for",
609
611
  "serves",
610
612
  "specializes",
611
613
  "supports",
@@ -1617,6 +1619,32 @@
1617
1619
  "symmetry": false,
1618
1620
  "reflexivity": false
1619
1621
  }
1622
+ },
1623
+ "scheduled-for": {
1624
+ "predicate": "scheduled-for",
1625
+ "inverse": "schedules",
1626
+ "category": "structural",
1627
+ "description": "Element is assigned to a time-bound delivery target",
1628
+ "archimate_alignment": null,
1629
+ "semantics": {
1630
+ "directionality": "bidirectional",
1631
+ "transitivity": false,
1632
+ "symmetry": false,
1633
+ "reflexivity": false
1634
+ }
1635
+ },
1636
+ "precedes": {
1637
+ "predicate": "precedes",
1638
+ "inverse": "follows",
1639
+ "category": "behavioral",
1640
+ "description": "Element comes before another in a temporal sequence",
1641
+ "archimate_alignment": null,
1642
+ "semantics": {
1643
+ "directionality": "bidirectional",
1644
+ "transitivity": true,
1645
+ "symmetry": false,
1646
+ "reflexivity": false
1647
+ }
1620
1648
  }
1621
1649
  }
1622
1650
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "specVersion": "0.8.4",
2
+ "specVersion": "0.9.0",
3
3
  "layer": {
4
4
  "id": "business",
5
5
  "number": 2,
@@ -1,10 +1,10 @@
1
1
  {
2
- "specVersion": "0.8.4",
2
+ "specVersion": "0.9.0",
3
3
  "layer": {
4
4
  "id": "data-model",
5
- "number": 7,
5
+ "number": 8,
6
6
  "name": "Data Model Layer",
7
- "description": "Layer 7: Data Model Layer",
7
+ "description": "Layer 8: Data Model Layer",
8
8
  "inspired_by": {
9
9
  "standard": "JSON Schema Draft 7",
10
10
  "version": "Draft 7",
@@ -1,10 +1,10 @@
1
1
  {
2
- "specVersion": "0.8.4",
2
+ "specVersion": "0.9.0",
3
3
  "layer": {
4
4
  "id": "data-store",
5
- "number": 8,
5
+ "number": 9,
6
6
  "name": "Data Store Layer",
7
- "description": "Layer 8: Data Store Layer",
7
+ "description": "Layer 9: Data Store Layer",
8
8
  "inspired_by": {
9
9
  "standard": "ISO/IEC 9075 (SQL) + Paradigm Extensions",
10
10
  "version": "2024",