musubi-sdd 5.1.0 → 5.6.1

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 (232) hide show
  1. package/README.ja.md +106 -48
  2. package/README.md +110 -32
  3. package/bin/musubi-analyze.js +74 -67
  4. package/bin/musubi-browser.js +27 -26
  5. package/bin/musubi-change.js +48 -47
  6. package/bin/musubi-checkpoint.js +10 -7
  7. package/bin/musubi-convert.js +25 -25
  8. package/bin/musubi-costs.js +27 -10
  9. package/bin/musubi-gui.js +52 -46
  10. package/bin/musubi-init.js +1952 -10
  11. package/bin/musubi-orchestrate.js +327 -239
  12. package/bin/musubi-remember.js +69 -56
  13. package/bin/musubi-resolve.js +53 -45
  14. package/bin/musubi-trace.js +51 -22
  15. package/bin/musubi-validate.js +39 -30
  16. package/bin/musubi-workflow.js +33 -34
  17. package/bin/musubi.js +39 -2
  18. package/package.json +1 -1
  19. package/src/agents/agent-loop.js +94 -95
  20. package/src/agents/agentic/code-generator.js +119 -109
  21. package/src/agents/agentic/code-reviewer.js +105 -108
  22. package/src/agents/agentic/index.js +4 -4
  23. package/src/agents/browser/action-executor.js +13 -13
  24. package/src/agents/browser/ai-comparator.js +11 -10
  25. package/src/agents/browser/context-manager.js +6 -6
  26. package/src/agents/browser/index.js +5 -5
  27. package/src/agents/browser/nl-parser.js +31 -46
  28. package/src/agents/browser/screenshot.js +2 -2
  29. package/src/agents/browser/test-generator.js +6 -4
  30. package/src/agents/function-tool.js +71 -65
  31. package/src/agents/index.js +7 -7
  32. package/src/agents/schema-generator.js +98 -94
  33. package/src/analyzers/ast-extractor.js +158 -146
  34. package/src/analyzers/codegraph-auto-update.js +858 -0
  35. package/src/analyzers/complexity-analyzer.js +536 -0
  36. package/src/analyzers/context-optimizer.js +241 -126
  37. package/src/analyzers/impact-analyzer.js +1 -1
  38. package/src/analyzers/large-project-analyzer.js +766 -0
  39. package/src/analyzers/repository-map.js +77 -81
  40. package/src/analyzers/security-analyzer.js +19 -11
  41. package/src/analyzers/stuck-detector.js +19 -17
  42. package/src/converters/index.js +78 -57
  43. package/src/converters/ir/types.js +12 -12
  44. package/src/converters/parsers/musubi-parser.js +134 -126
  45. package/src/converters/parsers/openapi-parser.js +70 -53
  46. package/src/converters/parsers/speckit-parser.js +239 -175
  47. package/src/converters/writers/musubi-writer.js +123 -118
  48. package/src/converters/writers/speckit-writer.js +124 -113
  49. package/src/generators/rust-migration-generator.js +512 -0
  50. package/src/gui/public/index.html +1365 -1211
  51. package/src/gui/server.js +41 -40
  52. package/src/gui/services/file-watcher.js +23 -8
  53. package/src/gui/services/project-scanner.js +26 -20
  54. package/src/gui/services/replanning-service.js +27 -23
  55. package/src/gui/services/traceability-service.js +8 -8
  56. package/src/gui/services/workflow-service.js +14 -7
  57. package/src/index.js +151 -0
  58. package/src/integrations/cicd.js +90 -104
  59. package/src/integrations/codegraph-mcp.js +643 -0
  60. package/src/integrations/documentation.js +142 -103
  61. package/src/integrations/examples.js +95 -80
  62. package/src/integrations/github-client.js +17 -17
  63. package/src/integrations/index.js +5 -5
  64. package/src/integrations/mcp/index.js +21 -21
  65. package/src/integrations/mcp/mcp-context-provider.js +76 -78
  66. package/src/integrations/mcp/mcp-discovery.js +74 -72
  67. package/src/integrations/mcp/mcp-tool-registry.js +99 -94
  68. package/src/integrations/mcp-connector.js +70 -66
  69. package/src/integrations/platforms.js +50 -49
  70. package/src/integrations/tool-discovery.js +37 -31
  71. package/src/llm-providers/anthropic-provider.js +11 -11
  72. package/src/llm-providers/base-provider.js +16 -18
  73. package/src/llm-providers/copilot-provider.js +22 -19
  74. package/src/llm-providers/index.js +26 -25
  75. package/src/llm-providers/ollama-provider.js +11 -11
  76. package/src/llm-providers/openai-provider.js +12 -12
  77. package/src/managers/agent-memory.js +36 -24
  78. package/src/managers/checkpoint-manager.js +4 -8
  79. package/src/managers/delta-spec.js +19 -19
  80. package/src/managers/index.js +13 -4
  81. package/src/managers/memory-condenser.js +35 -45
  82. package/src/managers/repo-skill-manager.js +57 -31
  83. package/src/managers/skill-loader.js +25 -22
  84. package/src/managers/skill-tools.js +36 -72
  85. package/src/managers/workflow.js +30 -22
  86. package/src/monitoring/cost-tracker.js +48 -46
  87. package/src/monitoring/incident-manager.js +116 -106
  88. package/src/monitoring/index.js +144 -134
  89. package/src/monitoring/observability.js +75 -62
  90. package/src/monitoring/quality-dashboard.js +45 -41
  91. package/src/monitoring/release-manager.js +63 -53
  92. package/src/orchestration/agent-skill-binding.js +39 -47
  93. package/src/orchestration/error-handler.js +65 -107
  94. package/src/orchestration/guardrails/base-guardrail.js +26 -24
  95. package/src/orchestration/guardrails/guardrail-rules.js +50 -64
  96. package/src/orchestration/guardrails/index.js +5 -5
  97. package/src/orchestration/guardrails/input-guardrail.js +58 -45
  98. package/src/orchestration/guardrails/output-guardrail.js +104 -81
  99. package/src/orchestration/guardrails/safety-check.js +79 -79
  100. package/src/orchestration/index.js +38 -55
  101. package/src/orchestration/mcp-tool-adapters.js +96 -99
  102. package/src/orchestration/orchestration-engine.js +21 -21
  103. package/src/orchestration/pattern-registry.js +60 -45
  104. package/src/orchestration/patterns/auto.js +34 -47
  105. package/src/orchestration/patterns/group-chat.js +59 -65
  106. package/src/orchestration/patterns/handoff.js +67 -65
  107. package/src/orchestration/patterns/human-in-loop.js +51 -72
  108. package/src/orchestration/patterns/nested.js +25 -40
  109. package/src/orchestration/patterns/sequential.js +35 -34
  110. package/src/orchestration/patterns/swarm.js +63 -56
  111. package/src/orchestration/patterns/triage.js +150 -109
  112. package/src/orchestration/reasoning/index.js +9 -9
  113. package/src/orchestration/reasoning/planning-engine.js +143 -140
  114. package/src/orchestration/reasoning/reasoning-engine.js +206 -144
  115. package/src/orchestration/reasoning/self-correction.js +121 -128
  116. package/src/orchestration/replanning/adaptive-goal-modifier.js +107 -112
  117. package/src/orchestration/replanning/alternative-generator.js +37 -42
  118. package/src/orchestration/replanning/config.js +63 -59
  119. package/src/orchestration/replanning/goal-progress-tracker.js +98 -100
  120. package/src/orchestration/replanning/index.js +24 -20
  121. package/src/orchestration/replanning/plan-evaluator.js +49 -50
  122. package/src/orchestration/replanning/plan-monitor.js +32 -28
  123. package/src/orchestration/replanning/proactive-path-optimizer.js +175 -178
  124. package/src/orchestration/replanning/replan-history.js +33 -26
  125. package/src/orchestration/replanning/replanning-engine.js +106 -108
  126. package/src/orchestration/skill-executor.js +107 -109
  127. package/src/orchestration/skill-registry.js +85 -89
  128. package/src/orchestration/workflow-examples.js +228 -231
  129. package/src/orchestration/workflow-executor.js +65 -68
  130. package/src/orchestration/workflow-orchestrator.js +72 -73
  131. package/src/phase4-integration.js +47 -40
  132. package/src/phase5-integration.js +89 -30
  133. package/src/reporters/coverage-report.js +82 -30
  134. package/src/reporters/hierarchical-reporter.js +498 -0
  135. package/src/reporters/traceability-matrix-report.js +29 -20
  136. package/src/resolvers/issue-resolver.js +43 -31
  137. package/src/steering/advanced-validation.js +133 -124
  138. package/src/steering/auto-updater.js +60 -73
  139. package/src/steering/index.js +6 -6
  140. package/src/steering/quality-metrics.js +41 -35
  141. package/src/steering/steering-auto-update.js +83 -86
  142. package/src/steering/steering-validator.js +98 -106
  143. package/src/steering/template-constraints.js +53 -54
  144. package/src/templates/agents/claude-code/CLAUDE.md +32 -32
  145. package/src/templates/agents/claude-code/skills/agent-assistant/SKILL.md +13 -5
  146. package/src/templates/agents/claude-code/skills/ai-ml-engineer/mlops-guide.md +23 -23
  147. package/src/templates/agents/claude-code/skills/ai-ml-engineer/model-card-template.md +60 -41
  148. package/src/templates/agents/claude-code/skills/api-designer/api-patterns.md +27 -19
  149. package/src/templates/agents/claude-code/skills/api-designer/openapi-template.md +11 -7
  150. package/src/templates/agents/claude-code/skills/bug-hunter/SKILL.md +4 -3
  151. package/src/templates/agents/claude-code/skills/bug-hunter/root-cause-analysis.md +37 -15
  152. package/src/templates/agents/claude-code/skills/change-impact-analyzer/dependency-graph-patterns.md +36 -42
  153. package/src/templates/agents/claude-code/skills/change-impact-analyzer/impact-analysis-template.md +69 -60
  154. package/src/templates/agents/claude-code/skills/cloud-architect/aws-patterns.md +31 -38
  155. package/src/templates/agents/claude-code/skills/cloud-architect/azure-patterns.md +28 -23
  156. package/src/templates/agents/claude-code/skills/code-reviewer/SKILL.md +61 -0
  157. package/src/templates/agents/claude-code/skills/code-reviewer/best-practices.md +27 -0
  158. package/src/templates/agents/claude-code/skills/code-reviewer/review-checklist.md +29 -10
  159. package/src/templates/agents/claude-code/skills/code-reviewer/review-standards.md +29 -24
  160. package/src/templates/agents/claude-code/skills/constitution-enforcer/SKILL.md +8 -6
  161. package/src/templates/agents/claude-code/skills/constitution-enforcer/constitutional-articles.md +62 -26
  162. package/src/templates/agents/claude-code/skills/constitution-enforcer/phase-minus-one-gates.md +35 -16
  163. package/src/templates/agents/claude-code/skills/database-administrator/backup-recovery.md +27 -17
  164. package/src/templates/agents/claude-code/skills/database-administrator/tuning-guide.md +25 -20
  165. package/src/templates/agents/claude-code/skills/database-schema-designer/schema-patterns.md +39 -22
  166. package/src/templates/agents/claude-code/skills/devops-engineer/ci-cd-templates.md +25 -22
  167. package/src/templates/agents/claude-code/skills/issue-resolver/SKILL.md +24 -21
  168. package/src/templates/agents/claude-code/skills/orchestrator/SKILL.md +148 -63
  169. package/src/templates/agents/claude-code/skills/orchestrator/patterns.md +35 -16
  170. package/src/templates/agents/claude-code/skills/orchestrator/selection-matrix.md +69 -64
  171. package/src/templates/agents/claude-code/skills/performance-engineer/optimization-playbook.md +47 -47
  172. package/src/templates/agents/claude-code/skills/performance-optimizer/SKILL.md +69 -0
  173. package/src/templates/agents/claude-code/skills/performance-optimizer/benchmark-template.md +63 -45
  174. package/src/templates/agents/claude-code/skills/performance-optimizer/optimization-patterns.md +33 -35
  175. package/src/templates/agents/claude-code/skills/project-manager/SKILL.md +7 -6
  176. package/src/templates/agents/claude-code/skills/project-manager/agile-ceremonies.md +47 -28
  177. package/src/templates/agents/claude-code/skills/project-manager/project-templates.md +94 -78
  178. package/src/templates/agents/claude-code/skills/quality-assurance/SKILL.md +20 -17
  179. package/src/templates/agents/claude-code/skills/quality-assurance/qa-plan-template.md +63 -49
  180. package/src/templates/agents/claude-code/skills/release-coordinator/SKILL.md +5 -5
  181. package/src/templates/agents/claude-code/skills/release-coordinator/feature-flag-guide.md +30 -26
  182. package/src/templates/agents/claude-code/skills/release-coordinator/release-plan-template.md +67 -35
  183. package/src/templates/agents/claude-code/skills/requirements-analyst/ears-format.md +54 -42
  184. package/src/templates/agents/claude-code/skills/requirements-analyst/validation-rules.md +36 -33
  185. package/src/templates/agents/claude-code/skills/security-auditor/SKILL.md +77 -19
  186. package/src/templates/agents/claude-code/skills/security-auditor/audit-checklists.md +24 -24
  187. package/src/templates/agents/claude-code/skills/security-auditor/owasp-top-10.md +61 -20
  188. package/src/templates/agents/claude-code/skills/security-auditor/vulnerability-patterns.md +43 -11
  189. package/src/templates/agents/claude-code/skills/site-reliability-engineer/SKILL.md +1 -0
  190. package/src/templates/agents/claude-code/skills/site-reliability-engineer/incident-response-template.md +55 -25
  191. package/src/templates/agents/claude-code/skills/site-reliability-engineer/observability-patterns.md +78 -68
  192. package/src/templates/agents/claude-code/skills/site-reliability-engineer/slo-sli-guide.md +73 -53
  193. package/src/templates/agents/claude-code/skills/software-developer/solid-principles.md +83 -37
  194. package/src/templates/agents/claude-code/skills/software-developer/test-first-workflow.md +38 -31
  195. package/src/templates/agents/claude-code/skills/steering/SKILL.md +1 -0
  196. package/src/templates/agents/claude-code/skills/steering/auto-update-rules.md +31 -0
  197. package/src/templates/agents/claude-code/skills/system-architect/adr-template.md +25 -7
  198. package/src/templates/agents/claude-code/skills/system-architect/c4-model-guide.md +74 -61
  199. package/src/templates/agents/claude-code/skills/technical-writer/doc-templates/documentation-templates.md +70 -52
  200. package/src/templates/agents/claude-code/skills/test-engineer/SKILL.md +2 -0
  201. package/src/templates/agents/claude-code/skills/test-engineer/ears-test-mapping.md +75 -71
  202. package/src/templates/agents/claude-code/skills/test-engineer/test-types.md +85 -63
  203. package/src/templates/agents/claude-code/skills/traceability-auditor/coverage-matrix-template.md +39 -36
  204. package/src/templates/agents/claude-code/skills/traceability-auditor/gap-detection-rules.md +22 -17
  205. package/src/templates/agents/claude-code/skills/ui-ux-designer/SKILL.md +1 -0
  206. package/src/templates/agents/claude-code/skills/ui-ux-designer/accessibility-guidelines.md +49 -75
  207. package/src/templates/agents/claude-code/skills/ui-ux-designer/design-system-components.md +71 -59
  208. package/src/templates/agents/codex/AGENTS.md +74 -42
  209. package/src/templates/agents/cursor/AGENTS.md +74 -42
  210. package/src/templates/agents/gemini-cli/GEMINI.md +74 -42
  211. package/src/templates/agents/github-copilot/AGENTS.md +83 -51
  212. package/src/templates/agents/qwen-code/QWEN.md +74 -42
  213. package/src/templates/agents/windsurf/AGENTS.md +74 -42
  214. package/src/templates/architectures/README.md +41 -0
  215. package/src/templates/architectures/clean-architecture/README.md +113 -0
  216. package/src/templates/architectures/event-driven/README.md +162 -0
  217. package/src/templates/architectures/hexagonal/README.md +130 -0
  218. package/src/templates/index.js +6 -1
  219. package/src/templates/locale-manager.js +16 -16
  220. package/src/templates/shared/delta-spec-template.md +20 -13
  221. package/src/templates/shared/github-actions/musubi-issue-resolver.yml +5 -5
  222. package/src/templates/shared/github-actions/musubi-security-check.yml +3 -3
  223. package/src/templates/shared/github-actions/musubi-validate.yml +4 -4
  224. package/src/templates/shared/steering/structure.md +95 -0
  225. package/src/templates/skills/browser-agent.md +21 -16
  226. package/src/templates/skills/web-gui.md +8 -0
  227. package/src/templates/template-constraints.js +50 -53
  228. package/src/validators/advanced-validation.js +30 -36
  229. package/src/validators/constitutional-validator.js +77 -73
  230. package/src/validators/critic-system.js +49 -59
  231. package/src/validators/delta-format.js +59 -55
  232. package/src/validators/traceability-validator.js +7 -11
@@ -9,21 +9,25 @@ Guide for implementing Service Level Objectives (SLOs) and Service Level Indicat
9
9
  ## Key Concepts
10
10
 
11
11
  ### SLI (Service Level Indicator)
12
+
12
13
  A quantitative measure of service behavior.
13
14
 
14
15
  **Example**: 99.5% of requests return successfully in under 200ms.
15
16
 
16
17
  ### SLO (Service Level Objective)
18
+
17
19
  A target value for an SLI.
18
20
 
19
21
  **Example**: 99.9% availability over 30 days.
20
22
 
21
23
  ### SLA (Service Level Agreement)
24
+
22
25
  A contract with consequences for missing SLOs.
23
26
 
24
27
  **Example**: If uptime < 99.9%, customer gets 10% credit.
25
28
 
26
29
  ### Error Budget
30
+
27
31
  The acceptable amount of downtime/errors.
28
32
 
29
33
  **Example**: 99.9% availability = 43 minutes downtime/month budget.
@@ -33,32 +37,37 @@ The acceptable amount of downtime/errors.
33
37
  ## Common SLIs
34
38
 
35
39
  ### 1. Availability
40
+
36
41
  ```
37
42
  Availability = (Successful Requests / Total Requests) × 100
38
43
  ```
39
44
 
40
45
  ### 2. Latency
46
+
41
47
  ```
42
48
  Latency SLI = Requests < Threshold / Total Requests
43
49
  ```
44
50
 
45
51
  | Percentile | Typical Target |
46
- |------------|----------------|
47
- | p50 | < 100ms |
48
- | p95 | < 250ms |
49
- | p99 | < 500ms |
52
+ | ---------- | -------------- |
53
+ | p50 | < 100ms |
54
+ | p95 | < 250ms |
55
+ | p99 | < 500ms |
50
56
 
51
57
  ### 3. Throughput
58
+
52
59
  ```
53
60
  Throughput = Requests per Second (RPS)
54
61
  ```
55
62
 
56
63
  ### 4. Error Rate
64
+
57
65
  ```
58
66
  Error Rate = (Failed Requests / Total Requests) × 100
59
67
  ```
60
68
 
61
69
  ### 5. Saturation
70
+
62
71
  ```
63
72
  CPU Utilization, Memory Usage, Queue Depth
64
73
  ```
@@ -70,12 +79,12 @@ CPU Utilization, Memory Usage, Queue Depth
70
79
  ### Step 1: Identify Critical User Journeys
71
80
 
72
81
  ```markdown
73
- | Journey | Description | Importance |
74
- |---------|-------------|------------|
75
- | Login | User authentication | Critical |
76
- | Checkout | Payment processing | Critical |
77
- | Search | Product search | High |
78
- | Browse | Catalog browsing | Medium |
82
+ | Journey | Description | Importance |
83
+ | -------- | ------------------- | ---------- |
84
+ | Login | User authentication | Critical |
85
+ | Checkout | Payment processing | Critical |
86
+ | Search | Product search | High |
87
+ | Browse | Catalog browsing | Medium |
79
88
  ```
80
89
 
81
90
  ### Step 2: Define SLIs for Each Journey
@@ -85,16 +94,16 @@ journeys:
85
94
  login:
86
95
  slis:
87
96
  - type: availability
88
- measure: "% of successful logins"
97
+ measure: '% of successful logins'
89
98
  - type: latency
90
- measure: "p99 login time"
91
-
99
+ measure: 'p99 login time'
100
+
92
101
  checkout:
93
102
  slis:
94
103
  - type: availability
95
- measure: "% of successful checkouts"
104
+ measure: '% of successful checkouts'
96
105
  - type: latency
97
- measure: "p95 checkout time"
106
+ measure: 'p95 checkout time'
98
107
  ```
99
108
 
100
109
  ### Step 3: Set SLO Targets
@@ -104,11 +113,11 @@ slos:
104
113
  login-availability:
105
114
  target: 99.9%
106
115
  window: 30 days
107
-
116
+
108
117
  login-latency-p99:
109
118
  target: 500ms
110
119
  window: 30 days
111
-
120
+
112
121
  checkout-availability:
113
122
  target: 99.95%
114
123
  window: 30 days
@@ -118,29 +127,32 @@ slos:
118
127
 
119
128
  ## SLO Document Template
120
129
 
121
- ```markdown
130
+ ````markdown
122
131
  # SLO Document: [Service Name]
123
132
 
124
133
  ## Service Overview
134
+
125
135
  [Brief description of the service]
126
136
 
127
137
  ## SLO Summary
128
138
 
129
- | SLO | Target | Window | Priority |
130
- |-----|--------|--------|----------|
131
- | Availability | 99.9% | 30 days | P0 |
132
- | Latency (p99) | < 200ms | 30 days | P1 |
133
- | Error Rate | < 0.1% | 30 days | P1 |
139
+ | SLO | Target | Window | Priority |
140
+ | ------------- | ------- | ------- | -------- |
141
+ | Availability | 99.9% | 30 days | P0 |
142
+ | Latency (p99) | < 200ms | 30 days | P1 |
143
+ | Error Rate | < 0.1% | 30 days | P1 |
134
144
 
135
145
  ## Detailed SLOs
136
146
 
137
147
  ### Availability
148
+
138
149
  - **SLI**: Percentage of successful HTTP responses (2xx, 3xx)
139
150
  - **Target**: 99.9%
140
151
  - **Window**: Rolling 30 days
141
152
  - **Error Budget**: 43.2 minutes/month
142
153
 
143
154
  ### Latency
155
+
144
156
  - **SLI**: p99 latency of all API requests
145
157
  - **Target**: < 200ms
146
158
  - **Window**: Rolling 30 days
@@ -148,35 +160,40 @@ slos:
148
160
  ## Measurement
149
161
 
150
162
  ### Data Sources
163
+
151
164
  - Prometheus metrics
152
165
  - Application logs
153
166
  - Synthetic monitoring
154
167
 
155
168
  ### Queries
169
+
156
170
  ```promql
157
171
  # Availability
158
- sum(rate(http_requests_total{status=~"2..|3.."}[5m]))
159
- /
172
+ sum(rate(http_requests_total{status=~"2..|3.."}[5m]))
173
+ /
160
174
  sum(rate(http_requests_total[5m]))
161
175
 
162
176
  # Latency p99
163
- histogram_quantile(0.99,
177
+ histogram_quantile(0.99,
164
178
  sum(rate(http_request_duration_seconds_bucket[5m])) by (le)
165
179
  )
166
180
  ```
181
+ ````
167
182
 
168
183
  ## Alerting
169
184
 
170
- | Alert | Condition | Severity |
171
- |-------|-----------|----------|
172
- | Burn Rate High | 2% budget burned in 1h | Critical |
173
- | Burn Rate Warning | 5% budget burned in 6h | Warning |
185
+ | Alert | Condition | Severity |
186
+ | ----------------- | ---------------------- | -------- |
187
+ | Burn Rate High | 2% budget burned in 1h | Critical |
188
+ | Burn Rate Warning | 5% budget burned in 6h | Warning |
174
189
 
175
190
  ## Escalation
191
+
176
192
  - **P0**: Page on-call immediately
177
193
  - **P1**: Alert on-call, respond within 1h
178
194
  - **P2**: Next business day
179
- ```
195
+
196
+ ````
180
197
 
181
198
  ---
182
199
 
@@ -200,7 +217,7 @@ histogram_quantile(0.99,
200
217
  - All hands on reliability
201
218
  - Only critical fixes deployed
202
219
  - Requires director approval to deploy
203
- ```
220
+ ````
204
221
 
205
222
  ---
206
223
 
@@ -210,13 +227,13 @@ histogram_quantile(0.99,
210
227
 
211
228
  ```promql
212
229
  # 5-minute availability
213
- sum(rate(http_requests_total{status=~"2..|3.."}[5m]))
214
- /
230
+ sum(rate(http_requests_total{status=~"2..|3.."}[5m]))
231
+ /
215
232
  sum(rate(http_requests_total[5m]))
216
233
 
217
234
  # 30-day availability
218
- sum(increase(http_requests_total{status=~"2..|3.."}[30d]))
219
- /
235
+ sum(increase(http_requests_total{status=~"2..|3.."}[30d]))
236
+ /
220
237
  sum(increase(http_requests_total[30d]))
221
238
  ```
222
239
 
@@ -224,13 +241,13 @@ sum(increase(http_requests_total[30d]))
224
241
 
225
242
  ```promql
226
243
  # p99 latency
227
- histogram_quantile(0.99,
244
+ histogram_quantile(0.99,
228
245
  sum(rate(http_request_duration_seconds_bucket[5m])) by (le)
229
246
  )
230
247
 
231
248
  # Percentage of requests under 200ms
232
- sum(rate(http_request_duration_seconds_bucket{le="0.2"}[5m]))
233
- /
249
+ sum(rate(http_request_duration_seconds_bucket{le="0.2"}[5m]))
250
+ /
234
251
  sum(rate(http_request_duration_seconds_count[5m]))
235
252
  ```
236
253
 
@@ -240,11 +257,11 @@ sum(rate(http_request_duration_seconds_count[5m]))
240
257
  # Error budget remaining (as percentage)
241
258
  1 - (
242
259
  (1 - (
243
- sum(increase(http_requests_total{status=~"2..|3.."}[30d]))
244
- /
260
+ sum(increase(http_requests_total{status=~"2..|3.."}[30d]))
261
+ /
245
262
  sum(increase(http_requests_total[30d]))
246
- ))
247
- /
263
+ ))
264
+ /
248
265
  (1 - 0.999) # SLO target
249
266
  )
250
267
  ```
@@ -257,9 +274,9 @@ sum(rate(http_request_duration_seconds_count[5m]))
257
274
  # Grafana dashboard panels
258
275
 
259
276
  panels:
260
- - title: "Current Availability"
277
+ - title: 'Current Availability'
261
278
  type: stat
262
- query: "availability_sli"
279
+ query: 'availability_sli'
263
280
  thresholds:
264
281
  - value: 0.999
265
282
  color: green
@@ -268,18 +285,18 @@ panels:
268
285
  - value: 0
269
286
  color: red
270
287
 
271
- - title: "Error Budget Remaining"
288
+ - title: 'Error Budget Remaining'
272
289
  type: gauge
273
- query: "error_budget_remaining"
290
+ query: 'error_budget_remaining'
274
291
  max: 100
275
-
276
- - title: "Latency p99"
292
+
293
+ - title: 'Latency p99'
277
294
  type: timeseries
278
- query: "latency_p99"
279
-
280
- - title: "Error Budget Burn Rate"
295
+ query: 'latency_p99'
296
+
297
+ - title: 'Error Budget Burn Rate'
281
298
  type: timeseries
282
- query: "burn_rate_1h"
299
+ query: 'burn_rate_1h'
283
300
  ```
284
301
 
285
302
  ---
@@ -287,16 +304,19 @@ panels:
287
304
  ## SLO Review Checklist
288
305
 
289
306
  ### Weekly
307
+
290
308
  - [ ] Check error budget status
291
309
  - [ ] Review any SLO breaches
292
310
  - [ ] Assess burn rate trends
293
311
 
294
312
  ### Monthly
313
+
295
314
  - [ ] SLO performance report
296
315
  - [ ] Error budget consumption analysis
297
316
  - [ ] Review and adjust targets if needed
298
317
 
299
318
  ### Quarterly
319
+
300
320
  - [ ] Comprehensive SLO review
301
321
  - [ ] Update user journey mapping
302
322
  - [ ] Refine SLI definitions
@@ -11,27 +11,30 @@ SOLID is an acronym for five design principles that make software designs more u
11
11
  > **A class should have only one reason to change.**
12
12
 
13
13
  ### Definition
14
+
14
15
  A class should have only one job or responsibility. If a class has multiple responsibilities, changes to one responsibility may affect the other.
15
16
 
16
17
  ### Bad Example ❌
18
+
17
19
  ```typescript
18
20
  class UserService {
19
21
  createUser(data: UserData): User {
20
22
  // Create user
21
23
  const user = this.repository.create(data);
22
-
24
+
23
25
  // Send welcome email (second responsibility!)
24
26
  this.emailService.send(user.email, 'Welcome!');
25
-
27
+
26
28
  // Log activity (third responsibility!)
27
29
  this.logger.log(`User created: ${user.id}`);
28
-
30
+
29
31
  return user;
30
32
  }
31
33
  }
32
34
  ```
33
35
 
34
36
  ### Good Example ✅
37
+
35
38
  ```typescript
36
39
  class UserService {
37
40
  createUser(data: UserData): User {
@@ -48,6 +51,7 @@ class UserEventHandler {
48
51
  ```
49
52
 
50
53
  ### Checklist
54
+
51
55
  - [ ] Does the class have only one reason to change?
52
56
  - [ ] Can you describe the class responsibility in one sentence without "and"?
53
57
  - [ ] Are all methods related to the same responsibility?
@@ -59,9 +63,11 @@ class UserEventHandler {
59
63
  > **Software entities should be open for extension but closed for modification.**
60
64
 
61
65
  ### Definition
66
+
62
67
  You should be able to extend a class's behavior without modifying its existing code.
63
68
 
64
69
  ### Bad Example ❌
70
+
65
71
  ```typescript
66
72
  class PaymentProcessor {
67
73
  processPayment(type: string, amount: number): void {
@@ -77,6 +83,7 @@ class PaymentProcessor {
77
83
  ```
78
84
 
79
85
  ### Good Example ✅
86
+
80
87
  ```typescript
81
88
  interface PaymentMethod {
82
89
  process(amount: number): PaymentResult;
@@ -108,6 +115,7 @@ class PaymentProcessor {
108
115
  ```
109
116
 
110
117
  ### Checklist
118
+
111
119
  - [ ] Can new features be added without modifying existing code?
112
120
  - [ ] Are extension points (interfaces, abstract classes) defined?
113
121
  - [ ] Does adding a new case require only adding new code?
@@ -119,21 +127,26 @@ class PaymentProcessor {
119
127
  > **Subtypes must be substitutable for their base types.**
120
128
 
121
129
  ### Definition
130
+
122
131
  Objects of a superclass should be replaceable with objects of its subclasses without affecting program correctness.
123
132
 
124
133
  ### Bad Example ❌
134
+
125
135
  ```typescript
126
136
  class Rectangle {
127
- constructor(public width: number, public height: number) {}
128
-
137
+ constructor(
138
+ public width: number,
139
+ public height: number
140
+ ) {}
141
+
129
142
  setWidth(width: number): void {
130
143
  this.width = width;
131
144
  }
132
-
145
+
133
146
  setHeight(height: number): void {
134
147
  this.height = height;
135
148
  }
136
-
149
+
137
150
  area(): number {
138
151
  return this.width * this.height;
139
152
  }
@@ -144,7 +157,7 @@ class Square extends Rectangle {
144
157
  this.width = width;
145
158
  this.height = width; // Violates LSP!
146
159
  }
147
-
160
+
148
161
  setHeight(height: number): void {
149
162
  this.width = height;
150
163
  this.height = height; // Violates LSP!
@@ -160,14 +173,18 @@ function testRectangle(rect: Rectangle): void {
160
173
  ```
161
174
 
162
175
  ### Good Example ✅
176
+
163
177
  ```typescript
164
178
  interface Shape {
165
179
  area(): number;
166
180
  }
167
181
 
168
182
  class Rectangle implements Shape {
169
- constructor(public width: number, public height: number) {}
170
-
183
+ constructor(
184
+ public width: number,
185
+ public height: number
186
+ ) {}
187
+
171
188
  area(): number {
172
189
  return this.width * this.height;
173
190
  }
@@ -175,7 +192,7 @@ class Rectangle implements Shape {
175
192
 
176
193
  class Square implements Shape {
177
194
  constructor(public side: number) {}
178
-
195
+
179
196
  area(): number {
180
197
  return this.side * this.side;
181
198
  }
@@ -183,6 +200,7 @@ class Square implements Shape {
183
200
  ```
184
201
 
185
202
  ### Checklist
203
+
186
204
  - [ ] Can subclass be used anywhere parent is expected?
187
205
  - [ ] Do subclasses honor the parent's contract?
188
206
  - [ ] Are there any overridden methods that change expected behavior?
@@ -194,9 +212,11 @@ class Square implements Shape {
194
212
  > **Clients should not be forced to depend on interfaces they do not use.**
195
213
 
196
214
  ### Definition
215
+
197
216
  Many specific interfaces are better than one general-purpose interface. Don't force classes to implement methods they don't need.
198
217
 
199
218
  ### Bad Example ❌
219
+
200
220
  ```typescript
201
221
  interface Worker {
202
222
  work(): void;
@@ -205,19 +225,32 @@ interface Worker {
205
225
  }
206
226
 
207
227
  class HumanWorker implements Worker {
208
- work(): void { /* ... */ }
209
- eat(): void { /* ... */ }
210
- sleep(): void { /* ... */ }
228
+ work(): void {
229
+ /* ... */
230
+ }
231
+ eat(): void {
232
+ /* ... */
233
+ }
234
+ sleep(): void {
235
+ /* ... */
236
+ }
211
237
  }
212
238
 
213
239
  class RobotWorker implements Worker {
214
- work(): void { /* ... */ }
215
- eat(): void { throw new Error('Robots don\'t eat!'); } // Forced to implement!
216
- sleep(): void { throw new Error('Robots don\'t sleep!'); } // Forced to implement!
240
+ work(): void {
241
+ /* ... */
242
+ }
243
+ eat(): void {
244
+ throw new Error("Robots don't eat!");
245
+ } // Forced to implement!
246
+ sleep(): void {
247
+ throw new Error("Robots don't sleep!");
248
+ } // Forced to implement!
217
249
  }
218
250
  ```
219
251
 
220
252
  ### Good Example ✅
253
+
221
254
  ```typescript
222
255
  interface Workable {
223
256
  work(): void;
@@ -232,18 +265,27 @@ interface Sleepable {
232
265
  }
233
266
 
234
267
  class HumanWorker implements Workable, Eatable, Sleepable {
235
- work(): void { /* ... */ }
236
- eat(): void { /* ... */ }
237
- sleep(): void { /* ... */ }
268
+ work(): void {
269
+ /* ... */
270
+ }
271
+ eat(): void {
272
+ /* ... */
273
+ }
274
+ sleep(): void {
275
+ /* ... */
276
+ }
238
277
  }
239
278
 
240
279
  class RobotWorker implements Workable {
241
- work(): void { /* ... */ }
280
+ work(): void {
281
+ /* ... */
282
+ }
242
283
  // No need to implement eat or sleep!
243
284
  }
244
285
  ```
245
286
 
246
287
  ### Checklist
288
+
247
289
  - [ ] Are interfaces focused and cohesive?
248
290
  - [ ] Do implementing classes use all interface methods?
249
291
  - [ ] Can large interfaces be split into smaller ones?
@@ -255,9 +297,11 @@ class RobotWorker implements Workable {
255
297
  > **High-level modules should not depend on low-level modules. Both should depend on abstractions.**
256
298
 
257
299
  ### Definition
300
+
258
301
  Depend on abstractions (interfaces), not concrete implementations. This allows for flexibility and easier testing.
259
302
 
260
303
  ### Bad Example ❌
304
+
261
305
  ```typescript
262
306
  class MySQLDatabase {
263
307
  query(sql: string): any[] {
@@ -267,7 +311,7 @@ class MySQLDatabase {
267
311
 
268
312
  class UserRepository {
269
313
  private database = new MySQLDatabase(); // Tight coupling!
270
-
314
+
271
315
  findById(id: string): User {
272
316
  return this.database.query(`SELECT * FROM users WHERE id = '${id}'`);
273
317
  }
@@ -275,6 +319,7 @@ class UserRepository {
275
319
  ```
276
320
 
277
321
  ### Good Example ✅
322
+
278
323
  ```typescript
279
324
  interface Database {
280
325
  query(sql: string): any[];
@@ -294,7 +339,7 @@ class PostgreSQLDatabase implements Database {
294
339
 
295
340
  class UserRepository {
296
341
  constructor(private database: Database) {} // Injected!
297
-
342
+
298
343
  findById(id: string): User {
299
344
  return this.database.query(`SELECT * FROM users WHERE id = '${id}'`);
300
345
  }
@@ -309,6 +354,7 @@ const repository = new UserRepository(new MockDatabase());
309
354
  ```
310
355
 
311
356
  ### Checklist
357
+
312
358
  - [ ] Do high-level modules depend on abstractions?
313
359
  - [ ] Are dependencies injected rather than created internally?
314
360
  - [ ] Can implementations be swapped without code changes?
@@ -317,13 +363,13 @@ const repository = new UserRepository(new MockDatabase());
317
363
 
318
364
  ## SOLID Summary Table
319
365
 
320
- | Principle | Acronym | Key Idea |
321
- |-----------|---------|----------|
322
- | Single Responsibility | S | One class, one job |
323
- | Open/Closed | O | Extend, don't modify |
324
- | Liskov Substitution | L | Subtypes are replaceable |
325
- | Interface Segregation | I | Small, focused interfaces |
326
- | Dependency Inversion | D | Depend on abstractions |
366
+ | Principle | Acronym | Key Idea |
367
+ | --------------------- | ------- | ------------------------- |
368
+ | Single Responsibility | S | One class, one job |
369
+ | Open/Closed | O | Extend, don't modify |
370
+ | Liskov Substitution | L | Subtypes are replaceable |
371
+ | Interface Segregation | I | Small, focused interfaces |
372
+ | Dependency Inversion | D | Depend on abstractions |
327
373
 
328
374
  ---
329
375
 
@@ -331,13 +377,13 @@ const repository = new UserRepository(new MockDatabase());
331
377
 
332
378
  ### Constitutional Alignment
333
379
 
334
- | Principle | Constitutional Article |
335
- |-----------|----------------------|
336
- | SRP | Article VII: Simplicity Gate |
337
- | OCP | Article I: Library-First (extensible libraries) |
338
- | LSP | Article III: Test-First (substitutable mocks) |
339
- | ISP | Article VIII: Anti-Abstraction (focused interfaces) |
340
- | DIP | Article IX: Integration-First (testable dependencies) |
380
+ | Principle | Constitutional Article |
381
+ | --------- | ----------------------------------------------------- |
382
+ | SRP | Article VII: Simplicity Gate |
383
+ | OCP | Article I: Library-First (extensible libraries) |
384
+ | LSP | Article III: Test-First (substitutable mocks) |
385
+ | ISP | Article VIII: Anti-Abstraction (focused interfaces) |
386
+ | DIP | Article IX: Integration-First (testable dependencies) |
341
387
 
342
388
  ### When to Apply
343
389