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.
- package/README.ja.md +106 -48
- package/README.md +110 -32
- package/bin/musubi-analyze.js +74 -67
- package/bin/musubi-browser.js +27 -26
- package/bin/musubi-change.js +48 -47
- package/bin/musubi-checkpoint.js +10 -7
- package/bin/musubi-convert.js +25 -25
- package/bin/musubi-costs.js +27 -10
- package/bin/musubi-gui.js +52 -46
- package/bin/musubi-init.js +1952 -10
- package/bin/musubi-orchestrate.js +327 -239
- package/bin/musubi-remember.js +69 -56
- package/bin/musubi-resolve.js +53 -45
- package/bin/musubi-trace.js +51 -22
- package/bin/musubi-validate.js +39 -30
- package/bin/musubi-workflow.js +33 -34
- package/bin/musubi.js +39 -2
- package/package.json +1 -1
- package/src/agents/agent-loop.js +94 -95
- package/src/agents/agentic/code-generator.js +119 -109
- package/src/agents/agentic/code-reviewer.js +105 -108
- package/src/agents/agentic/index.js +4 -4
- package/src/agents/browser/action-executor.js +13 -13
- package/src/agents/browser/ai-comparator.js +11 -10
- package/src/agents/browser/context-manager.js +6 -6
- package/src/agents/browser/index.js +5 -5
- package/src/agents/browser/nl-parser.js +31 -46
- package/src/agents/browser/screenshot.js +2 -2
- package/src/agents/browser/test-generator.js +6 -4
- package/src/agents/function-tool.js +71 -65
- package/src/agents/index.js +7 -7
- package/src/agents/schema-generator.js +98 -94
- package/src/analyzers/ast-extractor.js +158 -146
- package/src/analyzers/codegraph-auto-update.js +858 -0
- package/src/analyzers/complexity-analyzer.js +536 -0
- package/src/analyzers/context-optimizer.js +241 -126
- package/src/analyzers/impact-analyzer.js +1 -1
- package/src/analyzers/large-project-analyzer.js +766 -0
- package/src/analyzers/repository-map.js +77 -81
- package/src/analyzers/security-analyzer.js +19 -11
- package/src/analyzers/stuck-detector.js +19 -17
- package/src/converters/index.js +78 -57
- package/src/converters/ir/types.js +12 -12
- package/src/converters/parsers/musubi-parser.js +134 -126
- package/src/converters/parsers/openapi-parser.js +70 -53
- package/src/converters/parsers/speckit-parser.js +239 -175
- package/src/converters/writers/musubi-writer.js +123 -118
- package/src/converters/writers/speckit-writer.js +124 -113
- package/src/generators/rust-migration-generator.js +512 -0
- package/src/gui/public/index.html +1365 -1211
- package/src/gui/server.js +41 -40
- package/src/gui/services/file-watcher.js +23 -8
- package/src/gui/services/project-scanner.js +26 -20
- package/src/gui/services/replanning-service.js +27 -23
- package/src/gui/services/traceability-service.js +8 -8
- package/src/gui/services/workflow-service.js +14 -7
- package/src/index.js +151 -0
- package/src/integrations/cicd.js +90 -104
- package/src/integrations/codegraph-mcp.js +643 -0
- package/src/integrations/documentation.js +142 -103
- package/src/integrations/examples.js +95 -80
- package/src/integrations/github-client.js +17 -17
- package/src/integrations/index.js +5 -5
- package/src/integrations/mcp/index.js +21 -21
- package/src/integrations/mcp/mcp-context-provider.js +76 -78
- package/src/integrations/mcp/mcp-discovery.js +74 -72
- package/src/integrations/mcp/mcp-tool-registry.js +99 -94
- package/src/integrations/mcp-connector.js +70 -66
- package/src/integrations/platforms.js +50 -49
- package/src/integrations/tool-discovery.js +37 -31
- package/src/llm-providers/anthropic-provider.js +11 -11
- package/src/llm-providers/base-provider.js +16 -18
- package/src/llm-providers/copilot-provider.js +22 -19
- package/src/llm-providers/index.js +26 -25
- package/src/llm-providers/ollama-provider.js +11 -11
- package/src/llm-providers/openai-provider.js +12 -12
- package/src/managers/agent-memory.js +36 -24
- package/src/managers/checkpoint-manager.js +4 -8
- package/src/managers/delta-spec.js +19 -19
- package/src/managers/index.js +13 -4
- package/src/managers/memory-condenser.js +35 -45
- package/src/managers/repo-skill-manager.js +57 -31
- package/src/managers/skill-loader.js +25 -22
- package/src/managers/skill-tools.js +36 -72
- package/src/managers/workflow.js +30 -22
- package/src/monitoring/cost-tracker.js +48 -46
- package/src/monitoring/incident-manager.js +116 -106
- package/src/monitoring/index.js +144 -134
- package/src/monitoring/observability.js +75 -62
- package/src/monitoring/quality-dashboard.js +45 -41
- package/src/monitoring/release-manager.js +63 -53
- package/src/orchestration/agent-skill-binding.js +39 -47
- package/src/orchestration/error-handler.js +65 -107
- package/src/orchestration/guardrails/base-guardrail.js +26 -24
- package/src/orchestration/guardrails/guardrail-rules.js +50 -64
- package/src/orchestration/guardrails/index.js +5 -5
- package/src/orchestration/guardrails/input-guardrail.js +58 -45
- package/src/orchestration/guardrails/output-guardrail.js +104 -81
- package/src/orchestration/guardrails/safety-check.js +79 -79
- package/src/orchestration/index.js +38 -55
- package/src/orchestration/mcp-tool-adapters.js +96 -99
- package/src/orchestration/orchestration-engine.js +21 -21
- package/src/orchestration/pattern-registry.js +60 -45
- package/src/orchestration/patterns/auto.js +34 -47
- package/src/orchestration/patterns/group-chat.js +59 -65
- package/src/orchestration/patterns/handoff.js +67 -65
- package/src/orchestration/patterns/human-in-loop.js +51 -72
- package/src/orchestration/patterns/nested.js +25 -40
- package/src/orchestration/patterns/sequential.js +35 -34
- package/src/orchestration/patterns/swarm.js +63 -56
- package/src/orchestration/patterns/triage.js +150 -109
- package/src/orchestration/reasoning/index.js +9 -9
- package/src/orchestration/reasoning/planning-engine.js +143 -140
- package/src/orchestration/reasoning/reasoning-engine.js +206 -144
- package/src/orchestration/reasoning/self-correction.js +121 -128
- package/src/orchestration/replanning/adaptive-goal-modifier.js +107 -112
- package/src/orchestration/replanning/alternative-generator.js +37 -42
- package/src/orchestration/replanning/config.js +63 -59
- package/src/orchestration/replanning/goal-progress-tracker.js +98 -100
- package/src/orchestration/replanning/index.js +24 -20
- package/src/orchestration/replanning/plan-evaluator.js +49 -50
- package/src/orchestration/replanning/plan-monitor.js +32 -28
- package/src/orchestration/replanning/proactive-path-optimizer.js +175 -178
- package/src/orchestration/replanning/replan-history.js +33 -26
- package/src/orchestration/replanning/replanning-engine.js +106 -108
- package/src/orchestration/skill-executor.js +107 -109
- package/src/orchestration/skill-registry.js +85 -89
- package/src/orchestration/workflow-examples.js +228 -231
- package/src/orchestration/workflow-executor.js +65 -68
- package/src/orchestration/workflow-orchestrator.js +72 -73
- package/src/phase4-integration.js +47 -40
- package/src/phase5-integration.js +89 -30
- package/src/reporters/coverage-report.js +82 -30
- package/src/reporters/hierarchical-reporter.js +498 -0
- package/src/reporters/traceability-matrix-report.js +29 -20
- package/src/resolvers/issue-resolver.js +43 -31
- package/src/steering/advanced-validation.js +133 -124
- package/src/steering/auto-updater.js +60 -73
- package/src/steering/index.js +6 -6
- package/src/steering/quality-metrics.js +41 -35
- package/src/steering/steering-auto-update.js +83 -86
- package/src/steering/steering-validator.js +98 -106
- package/src/steering/template-constraints.js +53 -54
- package/src/templates/agents/claude-code/CLAUDE.md +32 -32
- package/src/templates/agents/claude-code/skills/agent-assistant/SKILL.md +13 -5
- package/src/templates/agents/claude-code/skills/ai-ml-engineer/mlops-guide.md +23 -23
- package/src/templates/agents/claude-code/skills/ai-ml-engineer/model-card-template.md +60 -41
- package/src/templates/agents/claude-code/skills/api-designer/api-patterns.md +27 -19
- package/src/templates/agents/claude-code/skills/api-designer/openapi-template.md +11 -7
- package/src/templates/agents/claude-code/skills/bug-hunter/SKILL.md +4 -3
- package/src/templates/agents/claude-code/skills/bug-hunter/root-cause-analysis.md +37 -15
- package/src/templates/agents/claude-code/skills/change-impact-analyzer/dependency-graph-patterns.md +36 -42
- package/src/templates/agents/claude-code/skills/change-impact-analyzer/impact-analysis-template.md +69 -60
- package/src/templates/agents/claude-code/skills/cloud-architect/aws-patterns.md +31 -38
- package/src/templates/agents/claude-code/skills/cloud-architect/azure-patterns.md +28 -23
- package/src/templates/agents/claude-code/skills/code-reviewer/SKILL.md +61 -0
- package/src/templates/agents/claude-code/skills/code-reviewer/best-practices.md +27 -0
- package/src/templates/agents/claude-code/skills/code-reviewer/review-checklist.md +29 -10
- package/src/templates/agents/claude-code/skills/code-reviewer/review-standards.md +29 -24
- package/src/templates/agents/claude-code/skills/constitution-enforcer/SKILL.md +8 -6
- package/src/templates/agents/claude-code/skills/constitution-enforcer/constitutional-articles.md +62 -26
- package/src/templates/agents/claude-code/skills/constitution-enforcer/phase-minus-one-gates.md +35 -16
- package/src/templates/agents/claude-code/skills/database-administrator/backup-recovery.md +27 -17
- package/src/templates/agents/claude-code/skills/database-administrator/tuning-guide.md +25 -20
- package/src/templates/agents/claude-code/skills/database-schema-designer/schema-patterns.md +39 -22
- package/src/templates/agents/claude-code/skills/devops-engineer/ci-cd-templates.md +25 -22
- package/src/templates/agents/claude-code/skills/issue-resolver/SKILL.md +24 -21
- package/src/templates/agents/claude-code/skills/orchestrator/SKILL.md +148 -63
- package/src/templates/agents/claude-code/skills/orchestrator/patterns.md +35 -16
- package/src/templates/agents/claude-code/skills/orchestrator/selection-matrix.md +69 -64
- package/src/templates/agents/claude-code/skills/performance-engineer/optimization-playbook.md +47 -47
- package/src/templates/agents/claude-code/skills/performance-optimizer/SKILL.md +69 -0
- package/src/templates/agents/claude-code/skills/performance-optimizer/benchmark-template.md +63 -45
- package/src/templates/agents/claude-code/skills/performance-optimizer/optimization-patterns.md +33 -35
- package/src/templates/agents/claude-code/skills/project-manager/SKILL.md +7 -6
- package/src/templates/agents/claude-code/skills/project-manager/agile-ceremonies.md +47 -28
- package/src/templates/agents/claude-code/skills/project-manager/project-templates.md +94 -78
- package/src/templates/agents/claude-code/skills/quality-assurance/SKILL.md +20 -17
- package/src/templates/agents/claude-code/skills/quality-assurance/qa-plan-template.md +63 -49
- package/src/templates/agents/claude-code/skills/release-coordinator/SKILL.md +5 -5
- package/src/templates/agents/claude-code/skills/release-coordinator/feature-flag-guide.md +30 -26
- package/src/templates/agents/claude-code/skills/release-coordinator/release-plan-template.md +67 -35
- package/src/templates/agents/claude-code/skills/requirements-analyst/ears-format.md +54 -42
- package/src/templates/agents/claude-code/skills/requirements-analyst/validation-rules.md +36 -33
- package/src/templates/agents/claude-code/skills/security-auditor/SKILL.md +77 -19
- package/src/templates/agents/claude-code/skills/security-auditor/audit-checklists.md +24 -24
- package/src/templates/agents/claude-code/skills/security-auditor/owasp-top-10.md +61 -20
- package/src/templates/agents/claude-code/skills/security-auditor/vulnerability-patterns.md +43 -11
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/incident-response-template.md +55 -25
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/observability-patterns.md +78 -68
- package/src/templates/agents/claude-code/skills/site-reliability-engineer/slo-sli-guide.md +73 -53
- package/src/templates/agents/claude-code/skills/software-developer/solid-principles.md +83 -37
- package/src/templates/agents/claude-code/skills/software-developer/test-first-workflow.md +38 -31
- package/src/templates/agents/claude-code/skills/steering/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/steering/auto-update-rules.md +31 -0
- package/src/templates/agents/claude-code/skills/system-architect/adr-template.md +25 -7
- package/src/templates/agents/claude-code/skills/system-architect/c4-model-guide.md +74 -61
- package/src/templates/agents/claude-code/skills/technical-writer/doc-templates/documentation-templates.md +70 -52
- package/src/templates/agents/claude-code/skills/test-engineer/SKILL.md +2 -0
- package/src/templates/agents/claude-code/skills/test-engineer/ears-test-mapping.md +75 -71
- package/src/templates/agents/claude-code/skills/test-engineer/test-types.md +85 -63
- package/src/templates/agents/claude-code/skills/traceability-auditor/coverage-matrix-template.md +39 -36
- package/src/templates/agents/claude-code/skills/traceability-auditor/gap-detection-rules.md +22 -17
- package/src/templates/agents/claude-code/skills/ui-ux-designer/SKILL.md +1 -0
- package/src/templates/agents/claude-code/skills/ui-ux-designer/accessibility-guidelines.md +49 -75
- package/src/templates/agents/claude-code/skills/ui-ux-designer/design-system-components.md +71 -59
- package/src/templates/agents/codex/AGENTS.md +74 -42
- package/src/templates/agents/cursor/AGENTS.md +74 -42
- package/src/templates/agents/gemini-cli/GEMINI.md +74 -42
- package/src/templates/agents/github-copilot/AGENTS.md +83 -51
- package/src/templates/agents/qwen-code/QWEN.md +74 -42
- package/src/templates/agents/windsurf/AGENTS.md +74 -42
- package/src/templates/architectures/README.md +41 -0
- package/src/templates/architectures/clean-architecture/README.md +113 -0
- package/src/templates/architectures/event-driven/README.md +162 -0
- package/src/templates/architectures/hexagonal/README.md +130 -0
- package/src/templates/index.js +6 -1
- package/src/templates/locale-manager.js +16 -16
- package/src/templates/shared/delta-spec-template.md +20 -13
- package/src/templates/shared/github-actions/musubi-issue-resolver.yml +5 -5
- package/src/templates/shared/github-actions/musubi-security-check.yml +3 -3
- package/src/templates/shared/github-actions/musubi-validate.yml +4 -4
- package/src/templates/shared/steering/structure.md +95 -0
- package/src/templates/skills/browser-agent.md +21 -16
- package/src/templates/skills/web-gui.md +8 -0
- package/src/templates/template-constraints.js +50 -53
- package/src/validators/advanced-validation.js +30 -36
- package/src/validators/constitutional-validator.js +77 -73
- package/src/validators/critic-system.js +49 -59
- package/src/validators/delta-format.js +59 -55
- package/src/validators/traceability-validator.js +7 -11
|
@@ -16,14 +16,15 @@ This document defines the validation rules for EARS requirements in MUSUBI SDD.
|
|
|
16
16
|
def validate_unique_ids(requirements):
|
|
17
17
|
ids = [req.id for req in requirements]
|
|
18
18
|
duplicates = [id for id in ids if ids.count(id) > 1]
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
if duplicates:
|
|
21
21
|
FAIL(f"Duplicate requirement IDs: {duplicates}")
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
PASS("All requirement IDs are unique")
|
|
24
24
|
```
|
|
25
25
|
|
|
26
26
|
**Examples**:
|
|
27
|
+
|
|
27
28
|
```
|
|
28
29
|
✅ PASS: REQ-001, REQ-002, REQ-003
|
|
29
30
|
❌ FAIL: REQ-001, REQ-002, REQ-001 (duplicate)
|
|
@@ -48,7 +49,7 @@ def validate_ears_pattern(requirement):
|
|
|
48
49
|
for pattern in EARS_PATTERNS:
|
|
49
50
|
if re.match(pattern, requirement.text, re.IGNORECASE):
|
|
50
51
|
return PASS(f"{requirement.id} follows EARS pattern")
|
|
51
|
-
|
|
52
|
+
|
|
52
53
|
return FAIL(f"{requirement.id} does not follow EARS pattern")
|
|
53
54
|
```
|
|
54
55
|
|
|
@@ -66,11 +67,11 @@ FORBIDDEN_KEYWORDS = [
|
|
|
66
67
|
|
|
67
68
|
def validate_no_ambiguous_keywords(requirement):
|
|
68
69
|
text_lower = requirement.text.lower()
|
|
69
|
-
|
|
70
|
+
|
|
70
71
|
for keyword in FORBIDDEN_KEYWORDS:
|
|
71
72
|
if keyword in text_lower:
|
|
72
73
|
FAIL(f"{requirement.id} contains ambiguous keyword: '{keyword}'")
|
|
73
|
-
|
|
74
|
+
|
|
74
75
|
PASS(f"{requirement.id} has no ambiguous keywords")
|
|
75
76
|
```
|
|
76
77
|
|
|
@@ -87,7 +88,7 @@ def validate_mandatory_keywords(requirement):
|
|
|
87
88
|
for keyword in REQUIRED_KEYWORDS:
|
|
88
89
|
if keyword in requirement.text.upper():
|
|
89
90
|
return PASS(f"{requirement.id} contains '{keyword}'")
|
|
90
|
-
|
|
91
|
+
|
|
91
92
|
return FAIL(f"{requirement.id} missing SHALL or MUST")
|
|
92
93
|
```
|
|
93
94
|
|
|
@@ -108,7 +109,7 @@ def validate_atomic(requirement):
|
|
|
108
109
|
for pattern in ATOMIC_VIOLATIONS:
|
|
109
110
|
if re.search(pattern, requirement.text, re.IGNORECASE):
|
|
110
111
|
WARN(f"{requirement.id} may not be atomic - consider splitting")
|
|
111
|
-
|
|
112
|
+
|
|
112
113
|
PASS(f"{requirement.id} appears atomic")
|
|
113
114
|
```
|
|
114
115
|
|
|
@@ -131,11 +132,11 @@ MEASUREMENT_PATTERNS = [
|
|
|
131
132
|
def validate_measurable(requirement):
|
|
132
133
|
if not re.match(NF_REQUIREMENT_PATTERN, requirement.id):
|
|
133
134
|
return PASS(f"{requirement.id} is functional requirement")
|
|
134
|
-
|
|
135
|
+
|
|
135
136
|
for pattern in MEASUREMENT_PATTERNS:
|
|
136
137
|
if re.search(pattern, requirement.text):
|
|
137
138
|
return PASS(f"{requirement.id} has measurable criteria")
|
|
138
|
-
|
|
139
|
+
|
|
139
140
|
return WARN(f"{requirement.id} (non-functional) may lack measurable criteria")
|
|
140
141
|
```
|
|
141
142
|
|
|
@@ -160,7 +161,7 @@ def validate_testable(requirement):
|
|
|
160
161
|
for pattern in UNTESTABLE_PATTERNS:
|
|
161
162
|
if re.search(pattern, requirement.text, re.IGNORECASE):
|
|
162
163
|
WARN(f"{requirement.id} contains vague term '{pattern}' - make testable")
|
|
163
|
-
|
|
164
|
+
|
|
164
165
|
PASS(f"{requirement.id} appears testable")
|
|
165
166
|
```
|
|
166
167
|
|
|
@@ -185,7 +186,7 @@ def validate_no_implementation(requirement):
|
|
|
185
186
|
for pattern in IMPLEMENTATION_PATTERNS:
|
|
186
187
|
if re.search(pattern, requirement.text):
|
|
187
188
|
WARN(f"{requirement.id} contains implementation detail: '{pattern}'")
|
|
188
|
-
|
|
189
|
+
|
|
189
190
|
PASS(f"{requirement.id} appears technology-agnostic")
|
|
190
191
|
```
|
|
191
192
|
|
|
@@ -205,7 +206,7 @@ def validate_terminology(requirements, glossary):
|
|
|
205
206
|
for synonym in synonyms:
|
|
206
207
|
if synonym in req.text and term not in req.text:
|
|
207
208
|
WARN(f"{req.id}: Use '{term}' instead of '{synonym}'")
|
|
208
|
-
|
|
209
|
+
|
|
209
210
|
PASS("Terminology is consistent")
|
|
210
211
|
```
|
|
211
212
|
|
|
@@ -219,13 +220,13 @@ def validate_terminology(requirements, glossary):
|
|
|
219
220
|
def validate_no_conflicts(requirements):
|
|
220
221
|
# Group by subject
|
|
221
222
|
by_subject = group_by_subject(requirements)
|
|
222
|
-
|
|
223
|
+
|
|
223
224
|
for subject, reqs in by_subject.items():
|
|
224
225
|
# Check for conflicting actions
|
|
225
226
|
actions = [extract_action(req) for req in reqs]
|
|
226
227
|
if has_conflicts(actions):
|
|
227
228
|
FAIL(f"Conflicting requirements for {subject}")
|
|
228
|
-
|
|
229
|
+
|
|
229
230
|
PASS("No conflicts detected")
|
|
230
231
|
```
|
|
231
232
|
|
|
@@ -242,11 +243,11 @@ def validate_coverage(requirements, use_cases):
|
|
|
242
243
|
use_case = extract_use_case(req)
|
|
243
244
|
if use_case:
|
|
244
245
|
covered.add(use_case)
|
|
245
|
-
|
|
246
|
+
|
|
246
247
|
missing = set(use_cases) - covered
|
|
247
248
|
if missing:
|
|
248
249
|
WARN(f"Use cases without requirements: {missing}")
|
|
249
|
-
|
|
250
|
+
|
|
250
251
|
coverage_percent = len(covered) / len(use_cases) * 100
|
|
251
252
|
REPORT(f"Use case coverage: {coverage_percent:.1f}%")
|
|
252
253
|
```
|
|
@@ -265,10 +266,10 @@ def validate_forward_traceability(requirements, design):
|
|
|
265
266
|
for req in requirements:
|
|
266
267
|
if req.id not in design.requirement_references:
|
|
267
268
|
untraced.append(req.id)
|
|
268
|
-
|
|
269
|
+
|
|
269
270
|
if untraced:
|
|
270
271
|
FAIL(f"Requirements not traced to design: {untraced}")
|
|
271
|
-
|
|
272
|
+
|
|
272
273
|
PASS("All requirements traced to design")
|
|
273
274
|
```
|
|
274
275
|
|
|
@@ -282,15 +283,15 @@ def validate_forward_traceability(requirements, design):
|
|
|
282
283
|
def validate_backward_traceability(design, requirements):
|
|
283
284
|
req_ids = {req.id for req in requirements}
|
|
284
285
|
orphaned = []
|
|
285
|
-
|
|
286
|
+
|
|
286
287
|
for component in design.components:
|
|
287
288
|
for ref in component.requirement_refs:
|
|
288
289
|
if ref not in req_ids:
|
|
289
290
|
orphaned.append((component.name, ref))
|
|
290
|
-
|
|
291
|
+
|
|
291
292
|
if orphaned:
|
|
292
293
|
WARN(f"Design references non-existent requirements: {orphaned}")
|
|
293
|
-
|
|
294
|
+
|
|
294
295
|
PASS("All design elements trace to valid requirements")
|
|
295
296
|
```
|
|
296
297
|
|
|
@@ -307,22 +308,24 @@ def validate_backward_traceability(design, requirements):
|
|
|
307
308
|
|
|
308
309
|
## Summary
|
|
309
310
|
|
|
310
|
-
| Rule
|
|
311
|
-
|
|
312
|
-
| Unique IDs
|
|
313
|
-
| EARS Pattern
|
|
314
|
-
| No Ambiguous Keywords | ✅ PASS | 0
|
|
315
|
-
| Mandatory Keywords
|
|
316
|
-
| Atomic Requirements
|
|
317
|
-
| Measurable Criteria
|
|
318
|
-
| Testable
|
|
319
|
-
| No Implementation
|
|
320
|
-
| Forward Traceability
|
|
311
|
+
| Rule | Status | Issues |
|
|
312
|
+
| --------------------- | ------- | ------ |
|
|
313
|
+
| Unique IDs | ✅ PASS | 0 |
|
|
314
|
+
| EARS Pattern | ✅ PASS | 0 |
|
|
315
|
+
| No Ambiguous Keywords | ✅ PASS | 0 |
|
|
316
|
+
| Mandatory Keywords | ✅ PASS | 0 |
|
|
317
|
+
| Atomic Requirements | ⚠️ WARN | 2 |
|
|
318
|
+
| Measurable Criteria | ⚠️ WARN | 1 |
|
|
319
|
+
| Testable | ✅ PASS | 0 |
|
|
320
|
+
| No Implementation | ✅ PASS | 0 |
|
|
321
|
+
| Forward Traceability | ✅ PASS | 0 |
|
|
321
322
|
|
|
322
323
|
## Total: 15 requirements validated
|
|
323
324
|
|
|
324
325
|
### Passed: 15 (100%)
|
|
326
|
+
|
|
325
327
|
### Warnings: 3
|
|
328
|
+
|
|
326
329
|
### Failures: 0
|
|
327
330
|
|
|
328
331
|
## Issues
|
|
@@ -330,7 +333,7 @@ def validate_backward_traceability(design, requirements):
|
|
|
330
333
|
### Warnings
|
|
331
334
|
|
|
332
335
|
1. **REQ-USER-003**: May not be atomic - consider splitting
|
|
333
|
-
2. **REQ-AUTH-005**: May not be atomic - consider splitting
|
|
336
|
+
2. **REQ-AUTH-005**: May not be atomic - consider splitting
|
|
334
337
|
3. **REQ-NF-002**: May lack measurable criteria
|
|
335
338
|
|
|
336
339
|
## Recommendations
|
|
@@ -103,15 +103,12 @@ The SecurityAnalyzer module provides automated security risk detection for code,
|
|
|
103
103
|
### Module Usage
|
|
104
104
|
|
|
105
105
|
```javascript
|
|
106
|
-
const {
|
|
107
|
-
SecurityAnalyzer,
|
|
108
|
-
RiskLevel
|
|
109
|
-
} = require('musubi/src/analyzers/security-analyzer');
|
|
106
|
+
const { SecurityAnalyzer, RiskLevel } = require('musubi/src/analyzers/security-analyzer');
|
|
110
107
|
|
|
111
108
|
const analyzer = new SecurityAnalyzer({
|
|
112
|
-
strictMode: true,
|
|
109
|
+
strictMode: true, // Block critical risks
|
|
113
110
|
allowedCommands: ['npm', 'git', 'node'],
|
|
114
|
-
ignorePaths: ['node_modules', '.git', 'test']
|
|
111
|
+
ignorePaths: ['node_modules', '.git', 'test'],
|
|
115
112
|
});
|
|
116
113
|
|
|
117
114
|
// Analyze code content
|
|
@@ -120,7 +117,7 @@ const result = analyzer.analyzeContent(code, 'src/auth/login.js');
|
|
|
120
117
|
// Check validation status
|
|
121
118
|
const validation = analyzer.validateAction({
|
|
122
119
|
type: 'command',
|
|
123
|
-
command: 'rm -rf /tmp/cache'
|
|
120
|
+
command: 'rm -rf /tmp/cache',
|
|
124
121
|
});
|
|
125
122
|
|
|
126
123
|
if (validation.blocked) {
|
|
@@ -133,12 +130,12 @@ const report = analyzer.generateReport(result);
|
|
|
133
130
|
|
|
134
131
|
### Detection Categories
|
|
135
132
|
|
|
136
|
-
| Category
|
|
137
|
-
|
|
138
|
-
| **Secrets**
|
|
139
|
-
| **Dangerous Commands** | `rm -rf /`, `chmod 777`, `curl \| bash`
|
|
140
|
-
| **Vulnerabilities**
|
|
141
|
-
| **Network Risks**
|
|
133
|
+
| Category | Examples |
|
|
134
|
+
| ---------------------- | ----------------------------------------- |
|
|
135
|
+
| **Secrets** | API keys, passwords, tokens, private keys |
|
|
136
|
+
| **Dangerous Commands** | `rm -rf /`, `chmod 777`, `curl \| bash` |
|
|
137
|
+
| **Vulnerabilities** | eval(), innerHTML, SQL injection |
|
|
138
|
+
| **Network Risks** | Insecure HTTP, disabled TLS verification |
|
|
142
139
|
|
|
143
140
|
### Risk Levels
|
|
144
141
|
|
|
@@ -162,6 +159,65 @@ musubi-analyze security --scan ./src --report markdown
|
|
|
162
159
|
|
|
163
160
|
---
|
|
164
161
|
|
|
162
|
+
## MUSUBI RustMigrationGenerator Module (v5.5.0+)
|
|
163
|
+
|
|
164
|
+
**Available Module**: `src/generators/rust-migration-generator.js`
|
|
165
|
+
|
|
166
|
+
The RustMigrationGenerator module assists in migrating C/C++ code to Rust for improved memory safety.
|
|
167
|
+
|
|
168
|
+
### Module Usage
|
|
169
|
+
|
|
170
|
+
```javascript
|
|
171
|
+
const { RustMigrationGenerator, UNSAFE_PATTERNS, SECURITY_COMPONENTS } = require('musubi-sdd');
|
|
172
|
+
|
|
173
|
+
const generator = new RustMigrationGenerator();
|
|
174
|
+
const analysis = await generator.analyzeRustMigration('src/buffer.c');
|
|
175
|
+
|
|
176
|
+
console.log(`Risk Score: ${analysis.riskScore}`);
|
|
177
|
+
console.log(`Unsafe Patterns Found: ${analysis.unsafePatterns.length}`);
|
|
178
|
+
console.log(`Security Components: ${analysis.securityComponents.length}`);
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Unsafe Pattern Detection (27 Types)
|
|
182
|
+
|
|
183
|
+
| Category | Patterns |
|
|
184
|
+
| ---------------------- | ------------------------------------------ |
|
|
185
|
+
| **Memory Management** | malloc, calloc, realloc, free |
|
|
186
|
+
| **Buffer Overflow** | strcpy, strcat, sprintf, gets |
|
|
187
|
+
| **Pointer Operations** | Pointer arithmetic, casts, double pointers |
|
|
188
|
+
| **Concurrency** | pthread misuse, volatile misuse |
|
|
189
|
+
| **Format Strings** | printf with variable format |
|
|
190
|
+
|
|
191
|
+
### Security Component Identification
|
|
192
|
+
|
|
193
|
+
- Stack protection (`_FORTIFY_SOURCE`, stack canaries)
|
|
194
|
+
- Sanitizers (AddressSanitizer, MemorySanitizer)
|
|
195
|
+
- Cryptography (OpenSSL, libsodium)
|
|
196
|
+
- Authentication (PAM, SASL)
|
|
197
|
+
|
|
198
|
+
### Risk Scoring
|
|
199
|
+
|
|
200
|
+
```javascript
|
|
201
|
+
// Risk weights
|
|
202
|
+
const RISK_WEIGHTS = {
|
|
203
|
+
buffer_overflow: 10, // Critical: strcpy, gets, etc.
|
|
204
|
+
memory_management: 8, // High: malloc/free misuse
|
|
205
|
+
pointer_operation: 7, // High: pointer arithmetic
|
|
206
|
+
format_string: 9, // Critical: format string vulns
|
|
207
|
+
concurrency: 6, // Medium: race conditions
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
// Calculate total risk
|
|
211
|
+
const totalRisk = analysis.riskScore; // 0-100 scale
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Integration with Security Audit
|
|
215
|
+
|
|
216
|
+
1. **Identify unsafe code** in C/C++ projects
|
|
217
|
+
2. **Prioritize migration** based on risk score
|
|
218
|
+
3. **Generate migration roadmap** for Rust rewrite
|
|
219
|
+
4. **Track security improvements** post-migration
|
|
220
|
+
|
|
165
221
|
---
|
|
166
222
|
|
|
167
223
|
## Project Memory (Steering System)
|
|
@@ -1286,14 +1342,15 @@ security-audit/
|
|
|
1286
1342
|
|
|
1287
1343
|
Use MUSUBI Guardrails for automated security validation:
|
|
1288
1344
|
|
|
1289
|
-
| Command
|
|
1290
|
-
|
|
1291
|
-
| `musubi-validate guardrails --type input`
|
|
1292
|
-
| `musubi-validate guardrails --type output --redact` | Output sanitization with PII redaction
|
|
1293
|
-
| `musubi-validate guardrails --type safety`
|
|
1294
|
-
| `musubi-validate guardrails-chain`
|
|
1345
|
+
| Command | Purpose | Example |
|
|
1346
|
+
| --------------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------ |
|
|
1347
|
+
| `musubi-validate guardrails --type input` | Input validation (injection prevention) | `npx musubi-validate guardrails "user input" --type input` |
|
|
1348
|
+
| `musubi-validate guardrails --type output --redact` | Output sanitization with PII redaction | `npx musubi-validate guardrails "output" --type output --redact` |
|
|
1349
|
+
| `musubi-validate guardrails --type safety` | Safety check with threat detection | `npx musubi-validate guardrails "code" --type safety --level high` |
|
|
1350
|
+
| `musubi-validate guardrails-chain` | Run complete security guardrail chain | `npx musubi-validate guardrails-chain "content" --parallel` |
|
|
1295
1351
|
|
|
1296
1352
|
**Security Presets**:
|
|
1353
|
+
|
|
1297
1354
|
```bash
|
|
1298
1355
|
# Input validation with strict security
|
|
1299
1356
|
npx musubi-validate guardrails --type input --preset strict
|
|
@@ -1306,6 +1363,7 @@ npx musubi-validate guardrails --type safety --constitutional --level critical
|
|
|
1306
1363
|
```
|
|
1307
1364
|
|
|
1308
1365
|
**Batch Security Scan**:
|
|
1366
|
+
|
|
1309
1367
|
```bash
|
|
1310
1368
|
# Scan all source files
|
|
1311
1369
|
npx musubi-validate guardrails --type safety --file "src/**/*.js" --level high
|
|
@@ -161,18 +161,18 @@ Comprehensive security checklists for application and infrastructure audits.
|
|
|
161
161
|
|
|
162
162
|
### OWASP Top 10 (2021)
|
|
163
163
|
|
|
164
|
-
| #
|
|
165
|
-
|
|
166
|
-
| A01 | Broken Access Control
|
|
167
|
-
| A02 | Cryptographic Failures
|
|
168
|
-
| A03 | Injection
|
|
169
|
-
| A04 | Insecure Design
|
|
170
|
-
| A05 | Security Misconfiguration | Hardening, minimal install
|
|
171
|
-
| A06 | Vulnerable Components
|
|
172
|
-
| A07 | Auth Failures
|
|
173
|
-
| A08 | Integrity Failures
|
|
174
|
-
| A09 | Logging Failures
|
|
175
|
-
| A10 | SSRF
|
|
164
|
+
| # | Vulnerability | Key Controls |
|
|
165
|
+
| --- | ------------------------- | -------------------------------- |
|
|
166
|
+
| A01 | Broken Access Control | RBAC, ABAC, deny by default |
|
|
167
|
+
| A02 | Cryptographic Failures | TLS, encryption at rest |
|
|
168
|
+
| A03 | Injection | Input validation, parameterized |
|
|
169
|
+
| A04 | Insecure Design | Threat modeling, secure patterns |
|
|
170
|
+
| A05 | Security Misconfiguration | Hardening, minimal install |
|
|
171
|
+
| A06 | Vulnerable Components | SCA, dependency updates |
|
|
172
|
+
| A07 | Auth Failures | MFA, session security |
|
|
173
|
+
| A08 | Integrity Failures | CI/CD security, signing |
|
|
174
|
+
| A09 | Logging Failures | Audit logs, monitoring |
|
|
175
|
+
| A10 | SSRF | Input validation, allowlists |
|
|
176
176
|
|
|
177
177
|
### Security Headers
|
|
178
178
|
|
|
@@ -210,27 +210,27 @@ Permissions-Policy: geolocation=(), camera=()
|
|
|
210
210
|
|
|
211
211
|
### Critical (Immediately address)
|
|
212
212
|
|
|
213
|
-
| ID
|
|
214
|
-
|
|
215
|
-
| C1
|
|
213
|
+
| ID | Finding | Risk | Recommendation |
|
|
214
|
+
| --- | --------- | -------- | -------------- |
|
|
215
|
+
| C1 | [Finding] | Critical | [Fix] |
|
|
216
216
|
|
|
217
217
|
### High (Address within 7 days)
|
|
218
218
|
|
|
219
|
-
| ID
|
|
220
|
-
|
|
221
|
-
| H1
|
|
219
|
+
| ID | Finding | Risk | Recommendation |
|
|
220
|
+
| --- | --------- | ---- | -------------- |
|
|
221
|
+
| H1 | [Finding] | High | [Fix] |
|
|
222
222
|
|
|
223
223
|
### Medium (Address within 30 days)
|
|
224
224
|
|
|
225
|
-
| ID
|
|
226
|
-
|
|
227
|
-
| M1
|
|
225
|
+
| ID | Finding | Risk | Recommendation |
|
|
226
|
+
| --- | --------- | ------ | -------------- |
|
|
227
|
+
| M1 | [Finding] | Medium | [Fix] |
|
|
228
228
|
|
|
229
229
|
### Low (Address as resources allow)
|
|
230
230
|
|
|
231
|
-
| ID
|
|
232
|
-
|
|
233
|
-
| L1
|
|
231
|
+
| ID | Finding | Risk | Recommendation |
|
|
232
|
+
| --- | --------- | ---- | -------------- |
|
|
233
|
+
| L1 | [Finding] | Low | [Fix] |
|
|
234
234
|
|
|
235
235
|
## Positive Findings
|
|
236
236
|
|