ADR-008: Intelligent Content Population Engine for Diataxis Documentation
id: 008-intelligent-content-population-engine title: 'ADR-008: Intelligent Content Population Engine' sidebar_label: 'ADR-8: Intelligent Content Population Engine' sidebar_position: 8
Status
Accepted
Context
DocuMCP currently creates excellent Diataxis-compliant documentation structures through ADR-004 and ADR-006, but produces only skeleton content with placeholder text. This creates a significant gap between the framework's potential and delivered value, requiring users to manually populate all documentation content despite having comprehensive repository analysis data available.
The current setup-structure
tool (from ADR-006) provides:
- ✅ Professional Diataxis directory structure
- ✅ SSG-specific configuration and frontmatter
- ✅ Basic template content explaining Diataxis categories
- ❌ Missing: Project-specific content analysis and intelligent population
- ❌ Missing: Repository analysis integration for content suggestions
- ❌ Missing: Technology-specific documentation generation
Current User Journey:
- Repository analysis identifies TypeScript project with Express.js, PostgreSQL, Jest tests
- Diataxis structure created with generic placeholder content
- User must manually research and write all tutorials, how-to guides, reference docs, and explanations
- Result: 8-20 hours of manual documentation work despite intelligent analysis
Target User Journey:
- Repository analysis identifies project characteristics and technology stack
- Intelligent content population generates project-specific documentation
- User reviews and refines 60-80% pre-populated, contextually relevant content
- Result: 1-2 hours of refinement work with professional-quality starting point
Key gaps identified:
- Repository analysis data (125 files, TypeScript/JavaScript ecosystem, test infrastructure) not leveraged for content generation
- Extensive technology detection capabilities underutilized for creating relevant examples
- Diataxis framework implementation incomplete without intelligent content planning (ADR-004, lines 153-192)
- Competitive disadvantage: users get empty templates instead of intelligent assistance
Decision
We will implement an Intelligent Content Population Engine that bridges repository analysis with Diataxis content generation, creating the missing layer between structural generation and user-ready documentation.
Architecture Overview:
1. Content Intelligence Engine
Purpose: Transform repository analysis into structured content plans Core Capabilities:
- Project characteristic analysis (technology stack, architecture patterns, API surfaces)
- User journey mapping to appropriate Diataxis categories
- Content gap identification and priority assignment
- Technology-specific example and code snippet generation
2. Project-Aware Content Generators
Purpose: Create contextually relevant content for each Diataxis category Scope: Four specialized generators aligned with Diataxis framework:
Tutorial Content Generator
- Getting Started: Framework-specific installation, setup, and first success
- Feature Tutorials: Based on detected APIs, key dependencies, and project complexity
- Integration Tutorials: For detected services, databases, and external dependencies
How-To Guide Generator
- Common Tasks: Derived from project type and technology stack
- Troubleshooting: Based on detected tools, frameworks, and common pain points
- Deployment Guides: Technology-specific deployment patterns and best practices
Reference Documentation Generator
- API Documentation: Auto-generate from detected API surfaces and endpoints
- Configuration Reference: Based on identified config files and environment variables
- CLI Reference: For detected command-line tools and scripts
Explanation Content Generator
- Architecture Overview: Based on detected patterns, dependencies, and project structure
- Design Decisions: Technology choices and their implications
- Concept Explanations: Framework and domain-specific concepts
3. Repository Analysis Integration Layer
Purpose: Bridge analysis data with content generation Integration Points:
- Language ecosystem analysis → Technology-specific content
- Dependency analysis → Framework integration guides
- Project structure analysis → Architecture documentation
- Complexity assessment → Content depth and sophistication level
Implementation Architecture:
interface ContentPopulationEngine {
// Core engine interface
populateContent(
analysisId: string,
docsPath: string,
options: PopulationOptions
): Promise<PopulationResult>;
// Content planning
generateContentPlan(analysis: RepositoryAnalysis): ContentPlan;
identifyContentGaps(existing: ExistingContent, plan: ContentPlan): ContentGap[];
// Content generation
generateTutorialContent(plan: TutorialPlan, context: ProjectContext): TutorialContent;
generateHowToContent(plan: HowToPlan, context: ProjectContext): HowToContent;
generateReferenceContent(plan: ReferencePlan, context: ProjectContext): ReferenceContent;
generateExplanationContent(plan: ExplanationPlan, context: ProjectContext): ExplanationContent;
}
interface PopulationOptions {
level: 'basic' | 'comprehensive' | 'intelligent';
includeCodeExamples: boolean;
projectSpecific: boolean;
preserveExisting: boolean;
customizationProfile?: CustomizationProfile;
}
interface ContentPlan {
tutorials: TutorialSuggestion[];
howToGuides: HowToSuggestion[];
reference: ReferenceSuggestion[];
explanation: ExplanationSuggestion[];
crossReferences: ContentRelationship[];
estimatedEffort: EffortEstimate;
}
interface ProjectContext {
primaryLanguage: string;
frameworks: Framework[];
architecture: ArchitecturePattern;
apiSurfaces: APIAnalysis[];
deploymentTargets: DeploymentTarget[];
testingFrameworks: TestingFramework[];
dependencies: DependencyAnalysis;
}
Content Generation Algorithms:
Tutorial Generation Algorithm
function generateTutorials(analysis: RepositoryAnalysis): TutorialSuggestion[] {
const suggestions: TutorialSuggestion[] = [];
// Always include getting started
suggestions.push({
title: `Getting Started with ${analysis.metadata.projectName}`,
description: `Learn ${analysis.recommendations.primaryLanguage} development with ${analysis.metadata.projectName}`,
priority: 'high',
sections: generateGettingStartedSections(analysis),
codeExamples: generateTechnologySpecificExamples(analysis.dependencies.ecosystem)
});
// Framework-specific tutorials
if (analysis.dependencies.packages.includes('express')) {
suggestions.push({
title: 'Building REST APIs with Express.js',
description: 'Complete guide to creating RESTful services',
priority: 'high',
sections: generateExpressTutorialSections(analysis)
});
}
// Database integration tutorials
const dbDeps = detectDatabaseDependencies(analysis.dependencies.packages);
dbDeps.forEach(db => {
suggestions.push({
title: `Database Integration with ${db.name}`,
description: `Connect and interact with ${db.name} databases`,
priority: 'medium',
sections: generateDatabaseTutorialSections(db, analysis)
});
});
return suggestions;
}
Reference Generation Algorithm
function generateReference(analysis: RepositoryAnalysis): ReferenceSuggestion[] {
const suggestions: ReferenceSuggestion[] = [];
// API documentation from detected endpoints
const apiSurfaces = detectAPIEndpoints(analysis);
if (apiSurfaces.length > 0) {
suggestions.push({
title: 'API Reference',
description: 'Complete API endpoint documentation',
content: generateAPIDocumentation(apiSurfaces),
format: 'openapi-spec'
});
}
// Configuration reference from detected config files
const configFiles = detectConfigurationFiles(analysis);
configFiles.forEach(config => {
suggestions.push({
title: `${config.type} Configuration`,
description: `Configuration options for ${config.name}`,
content: generateConfigurationReference(config),
format: 'configuration-table'
});
});
// CLI reference from detected scripts
const cliCommands = detectCLICommands(analysis);
if (cliCommands.length > 0) {
suggestions.push({
title: 'Command Line Interface',
description: 'Available commands and options',
content: generateCLIReference(cliCommands),
format: 'cli-documentation'
});
}
return suggestions;
}
Technology-Specific Content Templates:
JavaScript/TypeScript Ecosystem
const JAVASCRIPT_TEMPLATES = {
gettingStarted: {
prerequisites: ['Node.js 18+', 'npm or yarn', 'Git'],
installationSteps: [
'Clone the repository',
'Install dependencies with npm install',
'Copy environment variables',
'Run development server'
],
verificationSteps: [
'Check server starts successfully',
'Access application in browser',
'Run test suite to verify setup'
]
},
expressAPI: {
sections: [
'Project Structure Overview',
'Creating Your First Route',
'Middleware Configuration',
'Database Integration',
'Error Handling',
'Testing Your API'
],
codeExamples: generateExpressCodeExamples
},
testingGuides: {
jest: generateJestHowToGuides,
cypress: generateCypressHowToGuides,
playwright: generatePlaywrightHowToGuides
}
};
Multi-Language Framework Support
JavaScript/TypeScript Ecosystem
const JAVASCRIPT_TEMPLATES = {
gettingStarted: {
prerequisites: ['Node.js 18+', 'npm or yarn', 'Git'],
installationSteps: [
'Clone the repository',
'Install dependencies with npm install',
'Copy environment variables',
'Run development server'
],
verificationSteps: [
'Check server starts successfully',
'Access application in browser',
'Run test suite to verify setup'
]
},
frameworks: {
express: {
tutorials: ['REST API Development', 'Middleware Configuration', 'Database Integration'],
howToGuides: ['Performance Optimization', 'Error Handling', 'Authentication Setup'],
reference: ['Route Configuration', 'Middleware Reference', 'Configuration Options'],
explanation: ['Express Architecture', 'Middleware Pattern', 'Async Handling']
},
react: {
tutorials: ['Component Development', 'State Management', 'React Router'],
howToGuides: ['Performance Optimization', 'Testing Components', 'Deployment'],
reference: ['Component API', 'Hooks Reference', 'Build Configuration'],
explanation: ['Component Architecture', 'State Flow', 'Rendering Lifecycle']
},
nestjs: {
tutorials: ['Dependency Injection', 'Controllers and Services', 'Database Integration'],
howToGuides: ['Custom Decorators', 'Microservices', 'GraphQL Integration'],
reference: ['Decorator Reference', 'Module System', 'Configuration'],
explanation: ['DI Architecture', 'Module Design', 'Enterprise Patterns']
}
}
};
Python Ecosystem Support
const PYTHON_TEMPLATES = {
gettingStarted: {
prerequisites: ['Python 3.8+', 'pip or poetry', 'Virtual environment'],
installationSteps: [
'Create virtual environment',
'Activate virtual environment',
'Install dependencies from requirements.txt/pyproject.toml',
'Set up environment variables',
'Run development server'
],
verificationSteps: [
'Check application starts successfully',
'Run test suite with pytest',
'Verify API endpoints respond correctly'
]
},
frameworks: {
django: {
tutorials: [
'Django Project Setup and Configuration',
'Models and Database Integration',
'Views and URL Routing',
'Django REST Framework APIs',
'User Authentication and Permissions'
],
howToGuides: [
'Deploy Django to Production',
'Optimize Database Queries',
'Implement Caching Strategies',
'Handle File Uploads',
'Configure CORS and Security'
],
reference: [
'Django Settings Reference',
'Model Field Types',
'URL Configuration Patterns',
'Middleware Reference',
'Management Commands'
],
explanation: [
'Django MTV Architecture',
'ORM Design Decisions',
'Security Model',
'Scalability Patterns'
]
},
fastapi: {
tutorials: [
'FastAPI Application Structure',
'Pydantic Models and Validation',
'Dependency Injection System',
'Database Integration with SQLAlchemy',
'Authentication and Security'
],
howToGuides: [
'Optimize FastAPI Performance',
'Implement Background Tasks',
'Handle File Processing',
'Set up Monitoring and Logging',
'Deploy with Docker and Kubernetes'
],
reference: [
'FastAPI Decorators Reference',
'Pydantic Model Configuration',
'Dependency System Reference',
'Security Utilities',
'Testing Utilities'
],
explanation: [
'ASGI vs WSGI Architecture',
'Type Hints and Validation',
'Dependency Injection Benefits',
'Performance Characteristics'
]
},
flask: {
tutorials: [
'Flask Application Factory Pattern',
'Blueprint Organization',
'Database Integration with SQLAlchemy',
'User Session Management',
'RESTful API Development'
],
howToGuides: [
'Structure Large Flask Applications',
'Implement Rate Limiting',
'Handle Background Jobs',
'Configure Production Deployment',
'Debug Flask Applications'
],
reference: [
'Flask Configuration Reference',
'Request and Response Objects',
'Template Engine Reference',
'Extension Integration',
'CLI Commands'
],
explanation: [
'Flask Philosophy and Design',
'WSGI Application Structure',
'Extension Ecosystem',
'Microframework Benefits'
]
}
}
};
class PythonContentGenerator implements FrameworkContentGenerator {
detectFramework(analysis: RepositoryAnalysis): Framework[] {
const frameworks: Framework[] = [];
// Django detection
if (this.hasDependency(analysis, 'django') ||
this.hasFile(analysis, 'manage.py') ||
this.hasFile(analysis, 'settings.py')) {
frameworks.push({
name: 'django',
version: this.extractVersion(analysis, 'django'),
configFiles: ['settings.py', 'urls.py', 'wsgi.py'],
appStructure: this.analyzeDjangoApps(analysis)
});
}
// FastAPI detection
if (this.hasDependency(analysis, 'fastapi') ||
this.hasImport(analysis, 'from fastapi import')) {
frameworks.push({
name: 'fastapi',
version: this.extractVersion(analysis, 'fastapi'),
configFiles: this.getFastAPIConfigFiles(analysis),
routerStructure: this.analyzeFastAPIRouters(analysis)
});
}
// Flask detection
if (this.hasDependency(analysis, 'flask') ||
this.hasImport(analysis, 'from flask import')) {
frameworks.push({
name: 'flask',
version: this.extractVersion(analysis, 'flask'),
configFiles: this.getFlaskConfigFiles(analysis),
blueprintStructure: this.analyzeFlaskBlueprints(analysis)
});
}
return frameworks;
}
generateFrameworkContent(framework: Framework, context: ProjectContext): FrameworkContent {
const templates = PYTHON_TEMPLATES.frameworks[framework.name];
return {
tutorials: templates.tutorials.map(title => ({
title: `${title} for ${context.projectName}`,
content: this.generatePythonTutorialContent(framework, title, context),
codeExamples: this.generatePythonCodeExamples(framework, title, context)
})),
howToGuides: templates.howToGuides.map(title => ({
title,
content: this.generatePythonHowToContent(framework, title, context),
tasks: this.generatePythonTasks(framework, title, context)
})),
reference: templates.reference.map(title => ({
title,
content: this.generatePythonReferenceContent(framework, title, context)
})),
explanation: templates.explanation.map(title => ({
title,
content: this.generatePythonExplanationContent(framework, title, context)
}))
};
}
}
Framework-Specific Content Generation
interface FrameworkContentGenerator {
detectFramework(dependencies: string[]): Framework | null;
generateFrameworkContent(framework: Framework, context: ProjectContext): FrameworkContent;
}
const FRAMEWORK_GENERATORS: Record<string, FrameworkContentGenerator> = {
// JavaScript/TypeScript frameworks
'express': new ExpressContentGenerator(),
'react': new ReactContentGenerator(),
'vue': new VueContentGenerator(),
'angular': new AngularContentGenerator(),
'nestjs': new NestJSContentGenerator(),
'fastify': new FastifyContentGenerator(),
// Python frameworks
'django': new DjangoContentGenerator(),
'fastapi': new FastAPIContentGenerator(),
'flask': new FlaskContentGenerator(),
'pyramid': new PyramidContentGenerator(),
// Future language support
'spring-boot': new SpringBootContentGenerator(), // Java
'gin': new GinContentGenerator(), // Go
'actix-web': new ActixContentGenerator() // Rust
};
Alternatives Considered
Manual Content Creation Only
- Pros: Simple implementation, full user control, no AI dependency
- Cons: Massive user effort, inconsistent quality, underutilizes analysis capabilities
- Decision: Rejected - provides minimal value over generic templates
AI-Generated Content via External APIs
- Pros: Advanced content generation, natural language processing
- Cons: External dependencies, costs, inconsistent quality, latency issues
- Decision: Rejected for initial version - adds complexity without guaranteed quality
Community-Contributed Content Templates
- Pros: Diverse perspectives, battle-tested content, community engagement
- Cons: Quality control challenges, maintenance overhead, incomplete coverage
- Decision: Considered for future enhancement - focus on algorithmic generation first
Generic Template Expansion
- Pros: Easier implementation, consistent structure
- Cons: Still requires significant manual work, doesn't leverage analysis intelligence
- Decision: Rejected - doesn't address core value proposition gap
Consequences
Positive
- Dramatic User Value Increase: 60-80% content pre-population vs. empty templates
- Competitive Differentiation: Only documentation tool with intelligent content generation
- Analysis ROI: Comprehensive repository analysis finally delivers proportional value
- Framework Completion: Fulfills ADR-004 vision for content planning intelligence
- User Experience: Transform from "structure generator" to "documentation assistant"
Negative
- Implementation Complexity: Significant engineering effort for content generation algorithms
- Content Quality Risk: Generated content may require refinement for accuracy
- Technology Coverage: Initial version limited to well-known frameworks and patterns
- Maintenance Overhead: Content templates require updates as technologies evolve
Risks and Mitigations
- Quality Control: Implement content validation and user review workflows
- Technology Coverage: Start with most common frameworks, expand based on usage
- Algorithm Accuracy: Validate generated content against project reality
- User Expectations: Clear communication about generated vs. curated content
Implementation Details
MCP Tool Interface
// New tool: populate_diataxis_content
interface PopulateDiataxisContentTool {
name: "populate_diataxis_content";
description: "Intelligently populate Diataxis documentation with project-specific content";
inputSchema: {
type: "object";
properties: {
analysisId: {
type: "string";
description: "Repository analysis ID from analyze_repository tool";
};
docsPath: {
type: "string";
description: "Path to documentation directory";
};
populationLevel: {
type: "string";
enum: ["basic", "comprehensive", "intelligent"];
default: "comprehensive";
description: "Level of content generation detail";
};
includeProjectSpecific: {
type: "boolean";
default: true;
description: "Generate project-specific examples and code";
};
preserveExisting: {
type: "boolean";
default: true;
description: "Preserve any existing content";
};
technologyFocus: {
type: "array";
items: { type: "string" };
description: "Specific technologies to emphasize in content";
};
};
required: ["analysisId", "docsPath"];
};
}
Content Generation Pipeline
class ContentPopulationEngine {
async populateContent(args: PopulationArgs): Promise<PopulationResult> {
// 1. Retrieve and validate repository analysis
const analysis = await this.getRepositoryAnalysis(args.analysisId);
this.validateAnalysis(analysis);
// 2. Generate content plan based on project characteristics
const contentPlan = await this.generateContentPlan(analysis, args.populationLevel);
// 3. Generate content for each Diataxis category
const [tutorials, howTos, reference, explanation] = await Promise.all([
this.generateTutorialContent(contentPlan.tutorials, analysis),
this.generateHowToContent(contentPlan.howToGuides, analysis),
this.generateReferenceContent(contentPlan.reference, analysis),
this.generateExplanationContent(contentPlan.explanation, analysis)
]);
// 4. Write content to documentation structure
const filesCreated = await this.writeContentToStructure(
args.docsPath,
{ tutorials, howTos, reference, explanation },
args.preserveExisting
);
// 5. Generate cross-references and navigation updates
await this.updateNavigationAndCrossReferences(args.docsPath, contentPlan);
return {
success: true,
filesCreated,
contentPlan,
populationMetrics: this.calculatePopulationMetrics(filesCreated),
nextSteps: this.generateNextSteps(analysis, contentPlan)
};
}
}
Technology Detection and Content Mapping
interface TechnologyMapper {
detectTechnologies(analysis: RepositoryAnalysis): TechnologyProfile;
mapToContentTemplates(technologies: TechnologyProfile): ContentTemplateSet;
generateTechnologySpecificExamples(
technology: Technology,
context: ProjectContext
): CodeExample[];
}
class JavaScriptTechnologyMapper implements TechnologyMapper {
detectTechnologies(analysis: RepositoryAnalysis): TechnologyProfile {
const profile: TechnologyProfile = {
runtime: this.detectRuntime(analysis), // Node.js, Deno, Bun
framework: this.detectFramework(analysis), // Express, Fastify, Koa
frontend: this.detectFrontend(analysis), // React, Vue, Angular
database: this.detectDatabase(analysis), // PostgreSQL, MongoDB, Redis
testing: this.detectTesting(analysis), // Jest, Mocha, Playwright
deployment: this.detectDeployment(analysis), // Docker, Kubernetes, Vercel
devops: this.detectDevOpsTools(analysis) // Ansible, Tekton, OpenShift, Podman
};
return profile;
}
mapToContentTemplates(technologies: TechnologyProfile): ContentTemplateSet {
return {
tutorials: this.generateTutorialTemplates(technologies),
howToGuides: this.generateHowToTemplates(technologies),
reference: this.generateReferenceTemplates(technologies),
explanation: this.generateExplanationTemplates(technologies)
};
}
}
DevOps and Infrastructure Tooling Support
DevOps Tool Detection and Content Generation
interface DevOpsToolMapper {
detectDevOpsTools(analysis: RepositoryAnalysis): DevOpsToolProfile;
generateDevOpsContent(tools: DevOpsToolProfile, context: ProjectContext): DevOpsContent;
createInfrastructureDocumentation(
infrastructure: InfrastructureProfile,
deploymentPattern: DeploymentPattern
): InfrastructureDocumentation;
}
interface DevOpsToolProfile {
containerization: ContainerTechnology[]; // Docker, Podman, Buildah
orchestration: OrchestrationTechnology[]; // Kubernetes, OpenShift, Nomad
cicd: CICDTechnology[]; // Tekton, GitHub Actions, Jenkins, GitLab CI
configuration: ConfigManagementTechnology[]; // Ansible, Terraform, Helm
monitoring: MonitoringTechnology[]; // Prometheus, Grafana, Jaeger
security: SecurityTechnology[]; // Falco, OPA, Vault
}
class DevOpsContentGenerator implements DevOpsToolMapper {
detectDevOpsTools(analysis: RepositoryAnalysis): DevOpsToolProfile {
return {
containerization: this.detectContainerization(analysis),
orchestration: this.detectOrchestration(analysis),
cicd: this.detectCICD(analysis),
configuration: this.detectConfigManagement(analysis),
monitoring: this.detectMonitoring(analysis),
security: this.detectSecurity(analysis)
};
}
private detectContainerization(analysis: RepositoryAnalysis): ContainerTechnology[] {
const detected: ContainerTechnology[] = [];
// Docker detection
if (this.hasFile(analysis, 'Dockerfile') ||
this.hasFile(analysis, 'docker-compose.yml') ||
this.hasFile(analysis, 'docker-compose.yaml')) {
detected.push({
name: 'docker',
version: this.extractDockerVersion(analysis),
configFiles: this.getDockerFiles(analysis),
usage: this.analyzeDockerUsage(analysis)
});
}
// Podman detection
if (this.hasFile(analysis, 'Containerfile') ||
this.hasReference(analysis, 'podman') ||
this.hasFile(analysis, 'podman-compose.yml')) {
detected.push({
name: 'podman',
version: this.extractPodmanVersion(analysis),
configFiles: this.getPodmanFiles(analysis),
usage: this.analyzePodmanUsage(analysis)
});
}
return detected;
}
private detectOrchestration(analysis: RepositoryAnalysis): OrchestrationTechnology[] {
const detected: OrchestrationTechnology[] = [];
// Kubernetes detection
if (this.hasDirectory(analysis, 'k8s/') ||
this.hasDirectory(analysis, 'kubernetes/') ||
this.hasFilePattern(analysis, '*.yaml', 'apiVersion: apps/v1') ||
this.hasFilePattern(analysis, '*.yml', 'kind: Deployment')) {
detected.push({
name: 'kubernetes',
manifests: this.getKubernetesManifests(analysis),
resources: this.analyzeKubernetesResources(analysis),
namespaces: this.extractNamespaces(analysis)
});
}
// OpenShift detection
if (this.hasDirectory(analysis, '.s2i/') ||
this.hasReference(analysis, 'openshift') ||
this.hasFileContent(analysis, 'kind: DeploymentConfig') ||
this.hasFileContent(analysis, 'kind: Route')) {
detected.push({
name: 'openshift',
templates: this.getOpenShiftTemplates(analysis),
buildConfigs: this.getBuildConfigs(analysis),
routes: this.getRoutes(analysis)
});
}
return detected;
}
private detectCICD(analysis: RepositoryAnalysis): CICDTechnology[] {
const detected: CICDTechnology[] = [];
// Tekton detection
if (this.hasDirectory(analysis, '.tekton/') ||
this.hasFileContent(analysis, 'apiVersion: tekton.dev') ||
this.hasFilePattern(analysis, '*.yaml', 'kind: Pipeline')) {
detected.push({
name: 'tekton',
pipelines: this.getTektonPipelines(analysis),
tasks: this.getTektonTasks(analysis),
triggers: this.getTektonTriggers(analysis)
});
}
return detected;
}
private detectConfigManagement(analysis: RepositoryAnalysis): ConfigManagementTechnology[] {
const detected: ConfigManagementTechnology[] = [];
// Ansible detection
if (this.hasFile(analysis, 'ansible.cfg') ||
this.hasDirectory(analysis, 'playbooks/') ||
this.hasDirectory(analysis, 'roles/') ||
this.hasFile(analysis, 'inventory') ||
this.hasFilePattern(analysis, '*.yml', 'hosts:') ||
this.hasFilePattern(analysis, '*.yaml', 'tasks:')) {
detected.push({
name: 'ansible',
playbooks: this.getAnsiblePlaybooks(analysis),
roles: this.getAnsibleRoles(analysis),
inventory: this.getAnsibleInventory(analysis),
vaultFiles: this.getAnsibleVault(analysis)
});
}
return detected;
}
}
DevOps-Specific Content Templates and Generation
Key DevOps Documentation Patterns:
- Container Tutorials: Project-specific Dockerfile optimization, multi-stage builds
- Orchestration Guides: Kubernetes/OpenShift deployment strategies
- Infrastructure as Code: Ansible playbooks for application deployment
- CI/CD Pipelines: Tekton pipeline configuration and best practices
const DEVOPS_CONTENT_TEMPLATES = {
docker: {
tutorial: 'Containerizing {projectName} with Docker',
howto: ['Optimize Docker Images', 'Debug Container Issues'],
reference: 'Dockerfile Configuration Reference',
explanation: 'Container Architecture Decisions'
},
kubernetes: {
tutorial: 'Deploying {projectName} to Kubernetes',
howto: ['Scale Applications', 'Troubleshoot Deployments'],
reference: 'Kubernetes Manifest Specifications',
explanation: 'Orchestration Strategy'
},
ansible: {
tutorial: 'Infrastructure as Code with Ansible',
howto: ['Automate Deployment', 'Manage Multi-Environment'],
reference: 'Playbook and Role Reference',
explanation: 'Configuration Management Strategy'
},
tekton: {
tutorial: 'CI/CD Pipeline with Tekton',
howto: ['Build and Deploy', 'Manage Secrets'],
reference: 'Pipeline Specifications',
explanation: 'Cloud Native CI/CD Architecture'
}
};
function generateDevOpsContent(
devopsProfile: DevOpsToolProfile,
projectContext: ProjectContext
): DevOpsContentPlan {
// Generate project-specific DevOps documentation
// based on detected tools and project characteristics
}
Community Contribution Framework for Language and Tool Support
Language Extension Architecture
interface LanguageExtension {
name: string;
ecosystem: string;
packageManagers: string[];
detectionPatterns: DetectionPattern[];
frameworks: FrameworkDefinition[];
contentTemplates: LanguageContentTemplates;
validationRules: ValidationRule[];
}
interface DetectionPattern {
type: 'file' | 'dependency' | 'import' | 'content';
pattern: string | RegExp;
weight: number; // 1-10, higher = more confident
description: string;
}
interface FrameworkDefinition {
name: string;
detectionPatterns: DetectionPattern[];
contentTemplates: FrameworkContentTemplates;
codeExamples: CodeExampleGenerator;
bestPractices: BestPractice[];
}
Contribution Guidelines for New Language Support
Step 1: Language Detection Implementation
// Example: Adding Go language support
const GO_LANGUAGE_EXTENSION: LanguageExtension = {
name: 'go',
ecosystem: 'go',
packageManagers: ['go mod', 'dep'],
detectionPatterns: [
{
type: 'file',
pattern: 'go.mod',
weight: 10,
description: 'Go module definition file'
},
{
type: 'file',
pattern: 'go.sum',
weight: 8,
description: 'Go module checksums'
},
{
type: 'file',
pattern: /.*\.go$/,
weight: 6,
description: 'Go source files'
},
{
type: 'content',
pattern: /^package main$/m,
weight: 7,
description: 'Go main package declaration'
}
],
frameworks: [
// Framework definitions...
],
contentTemplates: {
// Content templates...
}
};
Step 2: Framework-Specific Content Templates
// Example: Adding Gin framework support for Go
const GIN_FRAMEWORK: FrameworkDefinition = {
name: 'gin',
detectionPatterns: [
{
type: 'dependency',
pattern: 'github.com/gin-gonic/gin',
weight: 10,
description: 'Gin framework dependency'
},
{
type: 'import',
pattern: 'gin "github.com/gin-gonic/gin"',
weight: 9,
description: 'Gin framework import'
}
],
contentTemplates: {
tutorials: [
{
title: 'Building REST APIs with Gin',
diataxisType: 'tutorial',
sections: [
'Setting up Gin Application',
'Defining Routes and Handlers',
'Middleware Configuration',
'Database Integration',
'Testing Gin Applications'
],
prerequisites: [
'Go installed (1.19+)',
'Basic Go language knowledge',
'Understanding of HTTP concepts'
],
estimatedTime: '60 minutes',
difficulty: 'beginner'
}
],
howToGuides: [
{
title: 'Optimize Gin Performance',
diataxisType: 'how-to',
tasks: [
'Configure connection pooling',
'Implement caching strategies',
'Set up rate limiting',
'Profile and benchmark endpoints'
]
}
],
reference: [
{
title: 'Gin Router Configuration',
diataxisType: 'reference',
sections: [
'Route definition patterns',
'Middleware registration',
'Context object methods',
'Error handling patterns'
]
}
],
explanation: [
{
title: 'Gin Architecture and Design Decisions',
diataxisType: 'explanation',
topics: [
'HTTP router performance characteristics',
'Middleware pipeline design',
'Context lifecycle management',
'Comparison with other Go frameworks'
]
}
]
},
codeExamples: {
basicServer: `package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/health", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"status": "healthy",
})
})
r.Run(":8080")
}`,
middleware: `func LoggerMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
start := time.Now()
c.Next()
duration := time.Since(start)
log.Printf("%s %s %v", c.Request.Method, c.Request.URL.Path, duration)
}
}`
}
};
Step 3: Content Generation Logic
class GoContentGenerator implements FrameworkContentGenerator {
detectFramework(analysis: RepositoryAnalysis): Framework[] {
const frameworks: Framework[] = [];
// Check for Gin framework
if (this.hasGoModule(analysis, 'github.com/gin-gonic/gin')) {
frameworks.push({
name: 'gin',
version: this.extractGoModuleVersion(analysis, 'github.com/gin-gonic/gin'),
configFiles: this.getGinConfigFiles(analysis),
routeStructure: this.analyzeGinRoutes(analysis)
});
}
// Check for Echo framework
if (this.hasGoModule(analysis, 'github.com/labstack/echo')) {
frameworks.push({
name: 'echo',
version: this.extractGoModuleVersion(analysis, 'github.com/labstack/echo'),
configFiles: this.getEchoConfigFiles(analysis),
routeStructure: this.analyzeEchoRoutes(analysis)
});
}
return frameworks;
}
generateFrameworkContent(framework: Framework, context: ProjectContext): FrameworkContent {
const templates = GO_LANGUAGE_EXTENSION.frameworks
.find(f => f.name === framework.name)?.contentTemplates;
if (!templates) return this.generateGenericGoContent(framework, context);
return this.populateTemplatesWithProjectContext(templates, framework, context);
}
private generateProjectSpecificGoDockerfile(context: ProjectContext): string {
return `# Multi-stage build for ${context.projectName}
FROM golang:1.21-alpine AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o main .
# Final stage
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]`;
}
}
Contribution Process and Standards
Community Contribution Workflow
- Language Proposal: Submit GitHub issue with language/framework proposal
- Detection Patterns: Define comprehensive detection patterns
- Content Templates: Create Diataxis-compliant content templates
- Code Examples: Provide working, project-specific code examples
- Testing: Include validation tests for detection and generation
- Documentation: Document contribution for future maintainers
- Review Process: Community and maintainer review
- Integration: Merge into main extension registry
Quality Standards for Contributions
interface ContributionStandards {
detection: {
minimumPatterns: 3;
requiredTypes: ['file', 'dependency'];
weightDistribution: 'balanced'; // No single pattern > 70% weight
falsePositiveRate: '<5%';
};
content: {
diataxisCompliance: 'strict';
tutorialCount: 'minimum 2';
howToGuideCount: 'minimum 3';
referenceCompleteness: '80%';
explanationDepth: 'architectural decisions covered';
};
codeExamples: {
compilationSuccess: '100%';
projectSpecific: 'true';
bestPractices: 'current industry standards';
securityConsiderations: 'included';
};
testing: {
detectionAccuracy: '>90%';
contentGeneration: 'functional tests';
integrationTests: 'with existing systems';
performanceImpact: '<10% generation time increase';
};
}
Template Contribution Format
// Required structure for new language contributions
interface LanguageContributionTemplate {
metadata: {
contributorName: string;
contributorEmail: string;
languageName: string;
version: string;
lastUpdated: string;
maintenanceCommitment: 'ongoing' | 'initial-only';
};
detection: DetectionPatternSet;
frameworks: FrameworkDefinition[];
contentTemplates: ContentTemplateSet;
validation: ValidationTestSuite;
documentation: ContributionDocumentation;
}
// Example contribution file structure:
// src/languages/
// ├── go/
// │ ├── detection.ts
// │ ├── frameworks/
// │ │ ├── gin.ts
// │ │ ├── echo.ts
// │ │ └── fiber.ts
// │ ├── templates/
// │ │ ├── tutorials.ts
// │ │ ├── howto.ts
// │ │ ├── reference.ts
// │ │ └── explanation.ts
// │ ├── tests/
// │ │ ├── detection.test.ts
// │ │ └── generation.test.ts
// │ └── README.md
Community Validation and Review Process
Automated Validation Pipeline
interface ContributionValidation {
// Automated checks
syntaxValidation: 'TypeScript compilation success';
patternTesting: 'Detection accuracy against test repositories';
contentValidation: 'Diataxis compliance checking';
performanceImpact: 'Generation time benchmarking';
// Community review
peerReview: 'Two community developer approvals';
maintainerReview: 'Core team architectural review';
expertValidation: 'Language expert accuracy verification';
// Integration testing
endToEndTesting: 'Full workflow validation';
regressionTesting: 'No impact on existing languages';
documentationReview: 'Contribution documentation completeness';
}
Long-term Maintenance Framework
interface MaintenanceFramework {
languageUpdates: {
frameworkVersions: 'automated dependency tracking';
newFrameworks: 'community contribution process';
deprecatedPatterns: 'automated detection and flagging';
};
communityGovernance: {
languageMaintainers: 'designated community experts';
updateProcess: 'structured enhancement proposals';
qualityAssurance: 'continuous validation and testing';
};
toolingSupport: {
contributionCLI: 'automated scaffolding for new languages';
validationTools: 'automated testing and verification';
documentationGeneration: 'automated API documentation';
};
}
Quality Assurance
Content Validation Framework
interface ContentValidator {
validateAccuracy(content: GeneratedContent, analysis: RepositoryAnalysis): ValidationResult;
checkDiataxisCompliance(content: GeneratedContent): ComplianceResult;
verifyCodeExamples(examples: CodeExample[], projectContext: ProjectContext): ValidationResult;
assessContentCompleteness(content: GeneratedContent, plan: ContentPlan): CompletenessResult;
}
interface ValidationResult {
isValid: boolean;
issues: ValidationIssue[];
suggestions: ImprovementSuggestion[];
confidence: number;
}
Testing Strategy
describe('ContentPopulationEngine', () => {
describe('Tutorial Generation', () => {
it('should generate appropriate getting started tutorial for Express.js project');
it('should include technology-specific setup steps');
it('should provide working code examples');
it('should maintain Diataxis tutorial principles');
});
describe('Technology Detection', () => {
it('should correctly identify primary framework from package.json');
it('should detect database dependencies and generate appropriate content');
it('should handle multi-framework projects appropriately');
});
describe('Content Quality', () => {
it('should generate accurate code examples that match project structure');
it('should maintain consistent tone and style across content types');
it('should create appropriate cross-references between content sections');
});
});
Performance Requirements
- Content Generation Time: < 30 seconds for comprehensive population
- Memory Usage: < 500MB for large repository analysis and content generation
- Content Quality: 80%+ accuracy for generated technical content
- Coverage: Support for 15+ major JavaScript/TypeScript frameworks initially
Integration Points
Repository Analysis Integration (ADR-002)
- Leverage multi-layered analysis results for informed content generation
- Use complexity assessment to determine content depth and sophistication
- Integrate dependency analysis for framework-specific content selection
Diataxis Framework Integration (ADR-004)
- Implement content planning intelligence outlined in ADR-004 lines 153-192
- Generate content that strictly adheres to Diataxis category principles
- Create appropriate cross-references and user journey flows
MCP Tools API Integration (ADR-006)
- Add populate_diataxis_content as seventh core MCP tool
- Maintain consistent error handling and response format patterns
- Integrate with existing setup_structure tool for seamless workflow
SSG Configuration Integration (ADR-006)
- Generate content with appropriate frontmatter for target SSG
- Adapt content format and structure to SSG capabilities
- Ensure generated content renders correctly across all supported SSGs
Future Enhancements
Advanced AI Integration
- Large Language Model Integration: Use specialized models for content refinement
- Code Analysis AI: Advanced analysis of project patterns for more accurate content
- Natural Language Generation: Improve content quality and readability
Extended Technology Support
Python Ecosystem (Priority Implementation)
- Web Frameworks: Django, Flask, FastAPI, Pyramid, Bottle
- Data Science: Jupyter, Pandas, NumPy, SciPy documentation patterns
- ML/AI: TensorFlow, PyTorch, Scikit-learn integration guides
- API Development: Django REST Framework, FastAPI advanced patterns
- Testing: pytest, unittest, behave testing documentation
- Deployment: Gunicorn, uWSGI, Celery configuration guides
Additional Language Ecosystems
- Go Ecosystem: Gin, Echo, Fiber, Buffalo framework support
- Rust Ecosystem: Actix-web, Warp, Rocket, Axum content generation
- Java Ecosystem: Spring Boot, Quarkus, Micronaut, Play Framework
- C# Ecosystem: ASP.NET Core, Entity Framework, Blazor
- Ruby Ecosystem: Rails, Sinatra, Hanami framework support
- PHP Ecosystem: Laravel, Symfony, CodeIgniter patterns
DevOps and Infrastructure Expansion
- Extended Container Support: Buildah, Skopeo, LXC/LXD integration
- Advanced Orchestration: Nomad, Docker Swarm, Cloud Foundry support
- CI/CD Platforms: Jenkins, GitLab CI, Azure DevOps, CircleCI integration
- Infrastructure Tools: Terraform, Pulumi, CloudFormation content generation
- Service Mesh: Istio, Linkerd, Consul Connect documentation patterns
- Monitoring Stack: Prometheus, Grafana, ELK Stack, Jaeger integration guides
Community and Learning Features
- Content Quality Feedback: User ratings and improvement suggestions
- Template Sharing: Community-contributed content templates
- Usage Analytics: Track which content types provide most value
- Personalization: Adapt content style to team preferences and expertise level
Community Ecosystem and Contributions
- Language Extension Registry: Centralized repository for community language support
- Contribution Tooling: CLI tools for scaffolding new language extensions
- Validation Pipeline: Automated testing and quality assurance for contributions
- Community Governance: Language maintainer program and review processes
- Documentation Portal: Comprehensive guides for extending DocuMCP capabilities
- Template Marketplace: Sharing and discovery of specialized content templates
Enterprise Features
- Custom Content Standards: Organization-specific content templates and style guides
- Multi-language Support: Generate content in multiple languages
- Integration APIs: Connect with existing documentation management systems
- Approval Workflows: Review and approval processes for generated content
Success Metrics
User Value Metrics
- Time to Usable Documentation: Target < 30 minutes (vs. 8-20 hours manually)
- Content Completeness: 60-80% populated content out of the box
- User Satisfaction: 85%+ positive feedback on generated content quality
- Adoption Rate: 90%+ of users use content population vs. structure-only
Technical Metrics
- Content Accuracy: 80%+ technical accuracy for generated code examples
- Framework Coverage: Support 95% of detected JavaScript/TypeScript frameworks
- DevOps Tool Coverage: Support 90% of detected containerization and orchestration tools
- Performance: Content generation completes within 30 seconds
- Error Rate: < 5% content generation failures
Business Metrics
- Competitive Differentiation: Only tool providing intelligent content population
- Market Position: Establish DocuMCP as "intelligent documentation assistant"
- User Retention: Increase from documentation structure to full workflow adoption
- Community Growth: Attract technical writers and documentation specialists