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
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Hexagonal Architecture Template
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Hexagonal Architecture (Ports & Adapters) focuses on isolating the application core from external concerns.
|
|
6
|
+
|
|
7
|
+
## Directory Structure
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
src/
|
|
11
|
+
├── core/ # Application Core (Hexagon)
|
|
12
|
+
│ ├── domain/ # Domain model
|
|
13
|
+
│ │ ├── models/ # Entities and aggregates
|
|
14
|
+
│ │ ├── events/ # Domain events
|
|
15
|
+
│ │ └── services/ # Domain services
|
|
16
|
+
│ │
|
|
17
|
+
│ ├── ports/ # Ports (interfaces)
|
|
18
|
+
│ │ ├── inbound/ # Driving ports (use cases)
|
|
19
|
+
│ │ │ ├── UserService.ts
|
|
20
|
+
│ │ │ └── OrderService.ts
|
|
21
|
+
│ │ └── outbound/ # Driven ports (repositories, external)
|
|
22
|
+
│ │ ├── UserRepository.ts
|
|
23
|
+
│ │ └── PaymentGateway.ts
|
|
24
|
+
│ │
|
|
25
|
+
│ └── application/ # Application logic
|
|
26
|
+
│ ├── commands/ # Command handlers
|
|
27
|
+
│ ├── queries/ # Query handlers
|
|
28
|
+
│ └── services/ # Application services
|
|
29
|
+
│
|
|
30
|
+
└── adapters/ # Adapters (outside the hexagon)
|
|
31
|
+
├── inbound/ # Driving adapters
|
|
32
|
+
│ ├── http/ # REST API
|
|
33
|
+
│ ├── grpc/ # gRPC services
|
|
34
|
+
│ ├── graphql/ # GraphQL resolvers
|
|
35
|
+
│ └── cli/ # CLI interface
|
|
36
|
+
│
|
|
37
|
+
└── outbound/ # Driven adapters
|
|
38
|
+
├── persistence/ # Database implementations
|
|
39
|
+
├── messaging/ # Message queue clients
|
|
40
|
+
├── http-clients/ # External API clients
|
|
41
|
+
└── cache/ # Cache implementations
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Port Types
|
|
45
|
+
|
|
46
|
+
### Inbound Ports (Driving)
|
|
47
|
+
|
|
48
|
+
Define what the application CAN DO:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
// ports/inbound/UserService.ts
|
|
52
|
+
interface UserService {
|
|
53
|
+
createUser(command: CreateUserCommand): Promise<User>;
|
|
54
|
+
getUser(id: UserId): Promise<User | null>;
|
|
55
|
+
updateUser(command: UpdateUserCommand): Promise<User>;
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Outbound Ports (Driven)
|
|
60
|
+
|
|
61
|
+
Define what the application NEEDS:
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
// ports/outbound/UserRepository.ts
|
|
65
|
+
interface UserRepository {
|
|
66
|
+
save(user: User): Promise<void>;
|
|
67
|
+
findById(id: UserId): Promise<User | null>;
|
|
68
|
+
findByEmail(email: Email): Promise<User | null>;
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Adapter Types
|
|
73
|
+
|
|
74
|
+
### Inbound Adapters (Driving)
|
|
75
|
+
|
|
76
|
+
Translate external input to port calls:
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// adapters/inbound/http/UserController.ts
|
|
80
|
+
class UserController {
|
|
81
|
+
constructor(private userService: UserService) {}
|
|
82
|
+
|
|
83
|
+
async create(req: Request): Promise<Response> {
|
|
84
|
+
const user = await this.userService.createUser(req.body);
|
|
85
|
+
return Response.created(user);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Outbound Adapters (Driven)
|
|
91
|
+
|
|
92
|
+
Implement ports with external systems:
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
// adapters/outbound/persistence/PostgresUserRepository.ts
|
|
96
|
+
class PostgresUserRepository implements UserRepository {
|
|
97
|
+
async save(user: User): Promise<void> {
|
|
98
|
+
await this.db.query('INSERT INTO users ...');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Key Principles
|
|
104
|
+
|
|
105
|
+
1. **Core Independence**: The core knows nothing about adapters
|
|
106
|
+
2. **Ports as Contracts**: Ports define the API between core and outside
|
|
107
|
+
3. **Swappable Adapters**: Any adapter can be replaced without changing the core
|
|
108
|
+
4. **Testability**: Core can be tested with mock adapters
|
|
109
|
+
|
|
110
|
+
## Dependency Injection
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
// Composition root
|
|
114
|
+
const userRepository = new PostgresUserRepository(db);
|
|
115
|
+
const userService = new UserServiceImpl(userRepository);
|
|
116
|
+
const userController = new UserController(userService);
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Testing Strategy
|
|
120
|
+
|
|
121
|
+
| Component | Test Type | Approach |
|
|
122
|
+
| ----------- | ----------- | ------------------------ |
|
|
123
|
+
| Domain | Unit | Pure functions, no mocks |
|
|
124
|
+
| Ports | Contract | Interface compliance |
|
|
125
|
+
| Application | Unit | Mock outbound ports |
|
|
126
|
+
| Adapters | Integration | Real external systems |
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
_Hexagonal Architecture Template - MUSUBI SDD_
|
package/src/templates/index.js
CHANGED
|
@@ -5,7 +5,12 @@
|
|
|
5
5
|
|
|
6
6
|
'use strict';
|
|
7
7
|
|
|
8
|
-
const {
|
|
8
|
+
const {
|
|
9
|
+
LocaleManager,
|
|
10
|
+
SUPPORTED_LOCALES,
|
|
11
|
+
LOCALE_NAMES,
|
|
12
|
+
TEMPLATE_CATEGORIES,
|
|
13
|
+
} = require('./locale-manager');
|
|
9
14
|
|
|
10
15
|
module.exports = {
|
|
11
16
|
LocaleManager,
|
|
@@ -80,7 +80,7 @@ class LocaleManager {
|
|
|
80
80
|
*/
|
|
81
81
|
async getTemplate(category, locale = this.defaultLocale) {
|
|
82
82
|
const baseName = TEMPLATE_CATEGORIES[category] || category;
|
|
83
|
-
|
|
83
|
+
|
|
84
84
|
// Try exact locale match first
|
|
85
85
|
let templatePath = this.getTemplatePath(baseName, locale);
|
|
86
86
|
if (await fs.pathExists(templatePath)) {
|
|
@@ -123,19 +123,19 @@ class LocaleManager {
|
|
|
123
123
|
*/
|
|
124
124
|
async listTemplates() {
|
|
125
125
|
const result = {};
|
|
126
|
-
|
|
127
|
-
if (!await fs.pathExists(this.templatesPath)) {
|
|
126
|
+
|
|
127
|
+
if (!(await fs.pathExists(this.templatesPath))) {
|
|
128
128
|
return result;
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
const files = await fs.readdir(this.templatesPath);
|
|
132
|
-
|
|
132
|
+
|
|
133
133
|
for (const file of files) {
|
|
134
134
|
if (!file.endsWith('.md')) continue;
|
|
135
|
-
|
|
135
|
+
|
|
136
136
|
const { category, locale } = this.parseTemplateFilename(file);
|
|
137
137
|
if (!category) continue;
|
|
138
|
-
|
|
138
|
+
|
|
139
139
|
if (!result[category]) {
|
|
140
140
|
result[category] = [];
|
|
141
141
|
}
|
|
@@ -154,7 +154,7 @@ class LocaleManager {
|
|
|
154
154
|
*/
|
|
155
155
|
parseTemplateFilename(filename) {
|
|
156
156
|
const baseName = filename.replace('.md', '');
|
|
157
|
-
|
|
157
|
+
|
|
158
158
|
// Check for locale suffix
|
|
159
159
|
for (const locale of SUPPORTED_LOCALES) {
|
|
160
160
|
if (baseName.endsWith(`.${locale}`)) {
|
|
@@ -164,7 +164,7 @@ class LocaleManager {
|
|
|
164
164
|
};
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
|
-
|
|
167
|
+
|
|
168
168
|
// No locale suffix means English
|
|
169
169
|
return {
|
|
170
170
|
category: baseName,
|
|
@@ -182,10 +182,10 @@ class LocaleManager {
|
|
|
182
182
|
async createLocalizedTemplate(category, locale, content) {
|
|
183
183
|
const baseName = TEMPLATE_CATEGORIES[category] || category;
|
|
184
184
|
const templatePath = this.getTemplatePath(baseName, locale);
|
|
185
|
-
|
|
185
|
+
|
|
186
186
|
await fs.ensureDir(path.dirname(templatePath));
|
|
187
187
|
await fs.writeFile(templatePath, content, 'utf-8');
|
|
188
|
-
|
|
188
|
+
|
|
189
189
|
return templatePath;
|
|
190
190
|
}
|
|
191
191
|
|
|
@@ -199,19 +199,19 @@ class LocaleManager {
|
|
|
199
199
|
// Extract translatable sections
|
|
200
200
|
const sections = [];
|
|
201
201
|
const lines = content.split('\n');
|
|
202
|
-
|
|
202
|
+
|
|
203
203
|
let inCodeBlock = false;
|
|
204
|
-
|
|
204
|
+
|
|
205
205
|
for (let i = 0; i < lines.length; i++) {
|
|
206
206
|
const line = lines[i];
|
|
207
|
-
|
|
207
|
+
|
|
208
208
|
if (line.startsWith('```')) {
|
|
209
209
|
inCodeBlock = !inCodeBlock;
|
|
210
210
|
continue;
|
|
211
211
|
}
|
|
212
|
-
|
|
212
|
+
|
|
213
213
|
if (inCodeBlock) continue;
|
|
214
|
-
|
|
214
|
+
|
|
215
215
|
// Headers
|
|
216
216
|
if (line.startsWith('#')) {
|
|
217
217
|
sections.push({
|
|
@@ -221,7 +221,7 @@ class LocaleManager {
|
|
|
221
221
|
translate: true,
|
|
222
222
|
});
|
|
223
223
|
}
|
|
224
|
-
|
|
224
|
+
|
|
225
225
|
// Paragraphs (non-empty, non-special lines)
|
|
226
226
|
if (line.trim() && !line.startsWith('-') && !line.startsWith('*') && !line.startsWith('|')) {
|
|
227
227
|
sections.push({
|
|
@@ -10,12 +10,12 @@ Use this template for brownfield project change tracking.
|
|
|
10
10
|
|
|
11
11
|
### Delta Types
|
|
12
12
|
|
|
13
|
-
| Type
|
|
14
|
-
|
|
15
|
-
| `ADDED`
|
|
13
|
+
| Type | Usage | Example |
|
|
14
|
+
| ---------- | ----------------------------- | -------------------------------------------------- |
|
|
15
|
+
| `ADDED` | New requirement/component | `[ADDED] REQ-AUTH-005: OAuth2 support` |
|
|
16
16
|
| `MODIFIED` | Changed requirement/component | `[MODIFIED] REQ-AUTH-001: Updated password policy` |
|
|
17
|
-
| `REMOVED`
|
|
18
|
-
| `RENAMED`
|
|
17
|
+
| `REMOVED` | Deleted requirement/component | `[REMOVED] REQ-LEGACY-001: Deprecated feature` |
|
|
18
|
+
| `RENAMED` | Renamed identifier | `[RENAMED] UserService → AuthenticationService` |
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
@@ -43,15 +43,18 @@ Use this template for brownfield project change tracking.
|
|
|
43
43
|
- {api | database | ui | backend | frontend | security | performance | testing | documentation | infrastructure | configuration}
|
|
44
44
|
|
|
45
45
|
## Before State (for MODIFIED/RENAMED/REMOVED)
|
|
46
|
-
|
|
47
46
|
```
|
|
47
|
+
|
|
48
48
|
{Previous specification, code, or configuration}
|
|
49
|
+
|
|
49
50
|
```
|
|
50
51
|
|
|
51
52
|
## After State (for ADDED/MODIFIED/RENAMED)
|
|
52
53
|
|
|
53
54
|
```
|
|
55
|
+
|
|
54
56
|
{New specification, code, or configuration}
|
|
57
|
+
|
|
55
58
|
```
|
|
56
59
|
|
|
57
60
|
## Acceptance Criteria
|
|
@@ -85,7 +88,7 @@ Use this template for brownfield project change tracking.
|
|
|
85
88
|
|
|
86
89
|
### ADDED Example
|
|
87
90
|
|
|
88
|
-
|
|
91
|
+
````markdown
|
|
89
92
|
# Delta Specification: DELTA-AUTH-001
|
|
90
93
|
|
|
91
94
|
**Type**: ADDED
|
|
@@ -120,6 +123,7 @@ interface OAuthConfig {
|
|
|
120
123
|
|
|
121
124
|
function authenticateOAuth(config: OAuthConfig): Promise<Session>;
|
|
122
125
|
```
|
|
126
|
+
````
|
|
123
127
|
|
|
124
128
|
## Acceptance Criteria
|
|
125
129
|
|
|
@@ -127,7 +131,8 @@ function authenticateOAuth(config: OAuthConfig): Promise<Session>;
|
|
|
127
131
|
- [ ] Session created with correct user data
|
|
128
132
|
- [ ] Existing email accounts are linked
|
|
129
133
|
- [ ] Failed auth shows appropriate error
|
|
130
|
-
|
|
134
|
+
|
|
135
|
+
````
|
|
131
136
|
|
|
132
137
|
### MODIFIED Example
|
|
133
138
|
|
|
@@ -158,7 +163,7 @@ Security audit (SEC-2025-042) identified weak password policy as high risk.
|
|
|
158
163
|
|
|
159
164
|
```typescript
|
|
160
165
|
const PASSWORD_MIN_LENGTH = 8;
|
|
161
|
-
|
|
166
|
+
````
|
|
162
167
|
|
|
163
168
|
## After State
|
|
164
169
|
|
|
@@ -172,7 +177,8 @@ const PASSWORD_MIN_LENGTH = 12;
|
|
|
172
177
|
- [ ] Existing passwords remain valid
|
|
173
178
|
- [ ] UI displays updated requirements
|
|
174
179
|
- [ ] Tests updated for new policy
|
|
175
|
-
|
|
180
|
+
|
|
181
|
+
````
|
|
176
182
|
|
|
177
183
|
### REMOVED Example
|
|
178
184
|
|
|
@@ -204,7 +210,7 @@ Feature unused (0 invocations in 6 months). Maintenance burden not justified.
|
|
|
204
210
|
```typescript
|
|
205
211
|
// Deprecated since v2.0.0
|
|
206
212
|
function exportToXML(data: Record[]): string;
|
|
207
|
-
|
|
213
|
+
````
|
|
208
214
|
|
|
209
215
|
## Acceptance Criteria
|
|
210
216
|
|
|
@@ -212,7 +218,8 @@ function exportToXML(data: Record[]): string;
|
|
|
212
218
|
- [ ] Code and tests removed
|
|
213
219
|
- [ ] Documentation updated
|
|
214
220
|
- [ ] Changelog documents breaking change
|
|
215
|
-
|
|
221
|
+
|
|
222
|
+
````
|
|
216
223
|
|
|
217
224
|
---
|
|
218
225
|
|
|
@@ -230,7 +237,7 @@ musubi-change show DELTA-AUTH-001
|
|
|
230
237
|
|
|
231
238
|
# Analyze impact
|
|
232
239
|
musubi-change impact DELTA-AUTH-001
|
|
233
|
-
|
|
240
|
+
````
|
|
234
241
|
|
|
235
242
|
---
|
|
236
243
|
|
|
@@ -55,7 +55,7 @@ jobs:
|
|
|
55
55
|
run: |
|
|
56
56
|
musubi-resolve analyze ${{ steps.issue.outputs.number }} \
|
|
57
57
|
--output json > analysis.json
|
|
58
|
-
|
|
58
|
+
|
|
59
59
|
echo "result<<EOF" >> $GITHUB_OUTPUT
|
|
60
60
|
cat analysis.json >> $GITHUB_OUTPUT
|
|
61
61
|
echo "EOF" >> $GITHUB_OUTPUT
|
|
@@ -65,11 +65,11 @@ jobs:
|
|
|
65
65
|
with:
|
|
66
66
|
script: |
|
|
67
67
|
const analysis = ${{ steps.analyze.outputs.result }};
|
|
68
|
-
|
|
68
|
+
|
|
69
69
|
let comment = `## 🤖 MUSUBI Issue Analysis\n\n`;
|
|
70
70
|
comment += `**Type**: ${analysis.issueType}\n`;
|
|
71
71
|
comment += `**Status**: ${analysis.status}\n\n`;
|
|
72
|
-
|
|
72
|
+
|
|
73
73
|
if (analysis.requirements && analysis.requirements.length > 0) {
|
|
74
74
|
comment += `### Extracted Requirements\n\n`;
|
|
75
75
|
analysis.requirements.forEach((req, i) => {
|
|
@@ -77,12 +77,12 @@ jobs:
|
|
|
77
77
|
});
|
|
78
78
|
comment += '\n';
|
|
79
79
|
}
|
|
80
|
-
|
|
80
|
+
|
|
81
81
|
comment += `### Next Steps\n\n`;
|
|
82
82
|
comment += `- Add label \`musubi-implement\` to create a branch and PR\n`;
|
|
83
83
|
comment += `- Or comment \`/musubi implement\` to proceed\n\n`;
|
|
84
84
|
comment += `---\n_Analyzed by MUSUBI Issue Resolver_`;
|
|
85
|
-
|
|
85
|
+
|
|
86
86
|
await github.rest.issues.createComment({
|
|
87
87
|
owner: context.repo.owner,
|
|
88
88
|
repo: context.repo.repo,
|
|
@@ -39,17 +39,17 @@ jobs:
|
|
|
39
39
|
else
|
|
40
40
|
FILES=$(git diff --name-only HEAD~1 HEAD | grep -E '\.(js|ts|py|json|yml|yaml)$' || true)
|
|
41
41
|
fi
|
|
42
|
-
|
|
42
|
+
|
|
43
43
|
if [ -z "$FILES" ]; then
|
|
44
44
|
echo "No relevant files changed"
|
|
45
45
|
echo "risks=[]" >> $GITHUB_OUTPUT
|
|
46
46
|
echo "blocked=false" >> $GITHUB_OUTPUT
|
|
47
47
|
exit 0
|
|
48
48
|
fi
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
# セキュリティ分析実行
|
|
51
51
|
echo "$FILES" | xargs musubi-analyze security --format json > security-report.json 2>/dev/null || true
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
if [ -f security-report.json ]; then
|
|
54
54
|
CRITICAL=$(jq '[.risks[] | select(.severity == "critical")] | length' security-report.json 2>/dev/null || echo "0")
|
|
55
55
|
HIGH=$(jq '[.risks[] | select(.severity == "high")] | length' security-report.json 2>/dev/null || echo "0")
|
|
@@ -37,7 +37,7 @@ jobs:
|
|
|
37
37
|
run: |
|
|
38
38
|
# Run constitutional validation with scoring
|
|
39
39
|
npx musubi-validate score > validation-report.json 2>&1 || true
|
|
40
|
-
|
|
40
|
+
|
|
41
41
|
if [ -f validation-report.json ]; then
|
|
42
42
|
SCORE=$(jq '.score // 0' validation-report.json 2>/dev/null || echo "0")
|
|
43
43
|
PASS=$(jq '.pass // false' validation-report.json 2>/dev/null || echo "false")
|
|
@@ -53,7 +53,7 @@ jobs:
|
|
|
53
53
|
id: trace
|
|
54
54
|
run: |
|
|
55
55
|
npx musubi-trace --verify > trace-report.json 2>&1 || true
|
|
56
|
-
|
|
56
|
+
|
|
57
57
|
if [ -f trace-report.json ]; then
|
|
58
58
|
COVERAGE=$(jq '.coverage // 100' trace-report.json 2>/dev/null || echo "100")
|
|
59
59
|
ORPHANS=$(jq '.orphanCount // 0' trace-report.json 2>/dev/null || echo "0")
|
|
@@ -74,11 +74,11 @@ jobs:
|
|
|
74
74
|
const pass = '${{ steps.validate.outputs.pass }}';
|
|
75
75
|
const coverage = '${{ steps.trace.outputs.coverage }}';
|
|
76
76
|
const orphans = '${{ steps.trace.outputs.orphans }}';
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
const emoji = pass === 'true' ? '✅' : '⚠️';
|
|
79
79
|
const scoreNum = parseFloat(score) || 0;
|
|
80
80
|
const scoreBar = '█'.repeat(Math.floor(scoreNum / 10)) + '░'.repeat(10 - Math.floor(scoreNum / 10));
|
|
81
|
-
|
|
81
|
+
|
|
82
82
|
await github.rest.issues.createComment({
|
|
83
83
|
owner: context.repo.owner,
|
|
84
84
|
repo: context.repo.repo,
|
|
@@ -15,6 +15,101 @@
|
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
+
## Architecture Layers (Language-Agnostic)
|
|
19
|
+
|
|
20
|
+
The following layer definitions apply regardless of programming language:
|
|
21
|
+
|
|
22
|
+
### Layer 1: Domain / Core
|
|
23
|
+
|
|
24
|
+
**Purpose**: Business logic and domain models
|
|
25
|
+
**Rules**:
|
|
26
|
+
|
|
27
|
+
- MUST NOT depend on any other layer
|
|
28
|
+
- Contains: Entities, Value Objects, Domain Services, Domain Events
|
|
29
|
+
- No framework dependencies, no I/O
|
|
30
|
+
|
|
31
|
+
**Language Examples**:
|
|
32
|
+
| Language | Location | Pattern |
|
|
33
|
+
|----------|----------|---------|
|
|
34
|
+
| TypeScript | `lib/{feature}/domain/` | Classes/Types |
|
|
35
|
+
| Rust | `{crate}/src/domain/` | Structs + Traits |
|
|
36
|
+
| Python | `src/{pkg}/domain/` | Dataclasses |
|
|
37
|
+
| Go | `internal/domain/` | Structs + Interfaces |
|
|
38
|
+
| Java | `src/main/.../domain/` | Classes + Records |
|
|
39
|
+
|
|
40
|
+
### Layer 2: Application / Use Cases
|
|
41
|
+
|
|
42
|
+
**Purpose**: Orchestrate domain logic, implement use cases
|
|
43
|
+
**Rules**:
|
|
44
|
+
|
|
45
|
+
- Depends only on Domain layer
|
|
46
|
+
- Contains: Application Services, Commands, Queries, DTOs
|
|
47
|
+
- No direct I/O (uses ports/interfaces)
|
|
48
|
+
|
|
49
|
+
**Language Examples**:
|
|
50
|
+
| Language | Location | Pattern |
|
|
51
|
+
|----------|----------|---------|
|
|
52
|
+
| TypeScript | `lib/{feature}/application/` | Service classes |
|
|
53
|
+
| Rust | `{crate}/src/application/` | Impl blocks |
|
|
54
|
+
| Python | `src/{pkg}/application/` | Service functions |
|
|
55
|
+
| Go | `internal/app/` | Service structs |
|
|
56
|
+
| Java | `src/main/.../application/` | @Service classes |
|
|
57
|
+
|
|
58
|
+
### Layer 3: Infrastructure / Adapters
|
|
59
|
+
|
|
60
|
+
**Purpose**: External integrations (DB, APIs, messaging)
|
|
61
|
+
**Rules**:
|
|
62
|
+
|
|
63
|
+
- Depends on Application layer (implements ports)
|
|
64
|
+
- Contains: Repositories, API Clients, Message Publishers
|
|
65
|
+
- All I/O operations here
|
|
66
|
+
|
|
67
|
+
**Language Examples**:
|
|
68
|
+
| Language | Location | Pattern |
|
|
69
|
+
|----------|----------|---------|
|
|
70
|
+
| TypeScript | `lib/{feature}/infrastructure/` | Repository impls |
|
|
71
|
+
| Rust | `{crate}/src/infrastructure/` | Trait impls |
|
|
72
|
+
| Python | `src/{pkg}/infrastructure/` | Repository classes |
|
|
73
|
+
| Go | `internal/infra/` | Interface impls |
|
|
74
|
+
| Java | `src/main/.../infrastructure/` | @Repository classes |
|
|
75
|
+
|
|
76
|
+
### Layer 4: Interface / Presentation
|
|
77
|
+
|
|
78
|
+
**Purpose**: Entry points (CLI, API, Web UI)
|
|
79
|
+
**Rules**:
|
|
80
|
+
|
|
81
|
+
- Depends on Application layer
|
|
82
|
+
- Contains: Controllers, CLI handlers, API routes
|
|
83
|
+
- Input validation and response formatting
|
|
84
|
+
|
|
85
|
+
**Language Examples**:
|
|
86
|
+
| Language | Location | Pattern |
|
|
87
|
+
|----------|----------|---------|
|
|
88
|
+
| TypeScript | `app/api/` or `cli/` | Route handlers |
|
|
89
|
+
| Rust | `{crate}/src/api/` or `cli/` | Axum handlers |
|
|
90
|
+
| Python | `src/{pkg}/api/` or `cli/` | FastAPI routes |
|
|
91
|
+
| Go | `cmd/` or `internal/api/` | HTTP handlers |
|
|
92
|
+
| Java | `src/main/.../api/` | @RestController |
|
|
93
|
+
|
|
94
|
+
### Layer Dependency Rules
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
┌─────────────────────────────────────────┐
|
|
98
|
+
│ Interface / Presentation │ ← Entry points
|
|
99
|
+
├─────────────────────────────────────────┤
|
|
100
|
+
│ Application / Use Cases │ ← Orchestration
|
|
101
|
+
├─────────────────────────────────────────┤
|
|
102
|
+
│ Infrastructure / Adapters │ ← I/O & External
|
|
103
|
+
├─────────────────────────────────────────┤
|
|
104
|
+
│ Domain / Core │ ← Pure business logic
|
|
105
|
+
└─────────────────────────────────────────┘
|
|
106
|
+
|
|
107
|
+
Dependency Direction: ↓ (outer → inner)
|
|
108
|
+
Domain layer has NO dependencies
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
18
113
|
## Directory Organization
|
|
19
114
|
|
|
20
115
|
### Root Structure
|
|
@@ -55,55 +55,61 @@ npx musubi browser generate-test --history actions.json --output tests/e2e/login
|
|
|
55
55
|
## サポートするコマンド
|
|
56
56
|
|
|
57
57
|
### ナビゲーション
|
|
58
|
+
|
|
58
59
|
- `https://example.com を開く`
|
|
59
60
|
- `go to https://example.com`
|
|
60
61
|
- `ログインページにアクセス`
|
|
61
62
|
|
|
62
63
|
### クリック
|
|
64
|
+
|
|
63
65
|
- `ログインボタンをクリック`
|
|
64
66
|
- `click login button`
|
|
65
67
|
- `送信ボタンを押す`
|
|
66
68
|
|
|
67
69
|
### 入力
|
|
70
|
+
|
|
68
71
|
- `メール欄に「test@example.com」と入力`
|
|
69
72
|
- `type "hello" in email field`
|
|
70
73
|
- `パスワードに "secret" を入力`
|
|
71
74
|
|
|
72
75
|
### 待機
|
|
76
|
+
|
|
73
77
|
- `3秒待つ`
|
|
74
78
|
- `wait 5 seconds`
|
|
75
79
|
- `ローディングが消えるまで待つ`
|
|
76
80
|
|
|
77
81
|
### スクリーンショット
|
|
82
|
+
|
|
78
83
|
- `スクリーンショットを取る`
|
|
79
84
|
- `画面を「login-page」として保存`
|
|
80
85
|
- `take screenshot`
|
|
81
86
|
|
|
82
87
|
### 検証
|
|
88
|
+
|
|
83
89
|
- `「ログイン成功」が表示される`
|
|
84
90
|
- `verify "Welcome" is visible`
|
|
85
91
|
- `ダッシュボードが表示されること`
|
|
86
92
|
|
|
87
93
|
## セッションコマンド(インタラクティブモード)
|
|
88
94
|
|
|
89
|
-
| コマンド
|
|
90
|
-
|
|
91
|
-
| `history`
|
|
92
|
-
| `clear`
|
|
93
|
-
| `save-test <file>`
|
|
94
|
-
| `exit` / `quit` / `q` | ブラウザを閉じて終了
|
|
95
|
-
| `help` / `?`
|
|
95
|
+
| コマンド | 説明 |
|
|
96
|
+
| --------------------- | -------------------------------- |
|
|
97
|
+
| `history` | アクション履歴を表示 |
|
|
98
|
+
| `clear` | 履歴をクリア |
|
|
99
|
+
| `save-test <file>` | 履歴から Playwright テストを保存 |
|
|
100
|
+
| `exit` / `quit` / `q` | ブラウザを閉じて終了 |
|
|
101
|
+
| `help` / `?` | ヘルプを表示 |
|
|
96
102
|
|
|
97
103
|
## オプション
|
|
98
104
|
|
|
99
|
-
| オプション
|
|
100
|
-
|
|
101
|
-
| `--headless`
|
|
102
|
-
| `--no-headless` | ブラウザを表示
|
|
103
|
-
| `-b, --browser` | ブラウザ種類
|
|
104
|
-
| `-o, --output`
|
|
105
|
-
| `-t, --timeout` | タイムアウト(ms)
|
|
106
|
-
| `--threshold`
|
|
105
|
+
| オプション | 説明 | デフォルト |
|
|
106
|
+
| --------------- | ------------------------ | --------------- |
|
|
107
|
+
| `--headless` | ヘッドレスモードで実行 | `true` |
|
|
108
|
+
| `--no-headless` | ブラウザを表示 | - |
|
|
109
|
+
| `-b, --browser` | ブラウザ種類 | `chromium` |
|
|
110
|
+
| `-o, --output` | スクリーンショット保存先 | `./screenshots` |
|
|
111
|
+
| `-t, --timeout` | タイムアウト(ms) | `30000` |
|
|
112
|
+
| `--threshold` | 類似度閾値 | `0.95` |
|
|
107
113
|
|
|
108
114
|
## MUSUBI 仕様連携
|
|
109
115
|
|
|
@@ -125,7 +131,6 @@ test('REQ-001: User Login', async ({ page }) => {
|
|
|
125
131
|
// Pattern: event-driven
|
|
126
132
|
// Trigger: the user clicks the login button with valid credentials
|
|
127
133
|
// Action: display the dashboard page
|
|
128
|
-
|
|
129
134
|
// TODO: Implement test based on requirement
|
|
130
135
|
});
|
|
131
136
|
```
|
|
@@ -13,6 +13,7 @@ MUSUBI Web GUI provides a visual dashboard for Specification Driven Development
|
|
|
13
13
|
## Overview
|
|
14
14
|
|
|
15
15
|
The Web GUI Dashboard provides:
|
|
16
|
+
|
|
16
17
|
- **Real-time Project Monitoring**: Live updates via WebSocket
|
|
17
18
|
- **Workflow Visualization**: Visual SDD stage tracking
|
|
18
19
|
- **Traceability Matrix**: Requirements-to-implementation mapping
|
|
@@ -28,6 +29,7 @@ musubi-gui start
|
|
|
28
29
|
```
|
|
29
30
|
|
|
30
31
|
Options:
|
|
32
|
+
|
|
31
33
|
- `-p, --port <port>` - Server port (default: 3000)
|
|
32
34
|
- `-d, --dir <directory>` - Project directory (default: current)
|
|
33
35
|
- `--no-open` - Don't open browser automatically
|
|
@@ -113,10 +115,13 @@ src/gui/
|
|
|
113
115
|
## Dashboard Views
|
|
114
116
|
|
|
115
117
|
### Dashboard
|
|
118
|
+
|
|
116
119
|
Overview of project status, statistics, and recent specifications.
|
|
117
120
|
|
|
118
121
|
### Workflow
|
|
122
|
+
|
|
119
123
|
Visual representation of SDD workflow stages:
|
|
124
|
+
|
|
120
125
|
1. Steering
|
|
121
126
|
2. Requirements
|
|
122
127
|
3. Design
|
|
@@ -127,12 +132,15 @@ Visual representation of SDD workflow stages:
|
|
|
127
132
|
8. Completion
|
|
128
133
|
|
|
129
134
|
### Requirements
|
|
135
|
+
|
|
130
136
|
List of all requirements with EARS pattern detection.
|
|
131
137
|
|
|
132
138
|
### Traceability
|
|
139
|
+
|
|
133
140
|
Matrix showing links between requirements, designs, tasks, and implementations.
|
|
134
141
|
|
|
135
142
|
### Constitution
|
|
143
|
+
|
|
136
144
|
Display of constitutional articles governing the project.
|
|
137
145
|
|
|
138
146
|
## Integration
|