Skip to content

Estándares de Documentación - AudioLab Framework

Guía Completa para Documentación Consistente y Escalable


🎯 Propósito

Este documento define los estándares obligatorios para toda la documentación en AudioLab, garantizando:

  1. Consistencia - Mismo formato en todo el proyecto
  2. Escalabilidad - Fácil de mantener a medida que crece
  3. Descubribilidad - Los desarrolladores encuentran lo que necesitan
  4. Mantenibilidad - Documentación siempre actualizada

📚 Filosofía de Documentación

Principios Fundamentales

  1. Documentation as Code - Docs viven junto al código
  2. DRY (Don't Repeat Yourself) - Single source of truth
  3. Progressive Disclosure - De general a específico
  4. Examples First - Mostrar antes que explicar
  5. Living Documentation - Actualizar con cada cambio

Tipos de Documentación

README.md           → Qué es y cómo usarlo (Overview)
ARCHITECTURE.md     → Cómo funciona internamente (Design)
API.md              → Referencia de funciones (Reference)
GUIDE.md            → Tutoriales paso a paso (How-to)
CHANGELOG.md        → Historial de cambios (History)

🏗️ Estructura de Carpetas por Nivel

Nivel 1: Carpetas Raíz (00-20)

Ejemplo: 04_CORE/, 03_INFRA/, 05_MODULES/

Estructura Obligatoria:

XX_NOMBRE/
├── _docs/                      # ⭐ OBLIGATORIO
│   ├── README.md              # Índice de documentación
│   ├── reports/               # Reportes ejecutivos
│   ├── audits/                # Auditorías del sistema
│   ├── analytics/             # Métricas y análisis
│   ├── architecture/          # Diseño del sistema
│   └── guides/                # Guías de desarrollo
├── XX_00_subsystem/           # Primer subsistema
├── XX_01_subsystem/           # Segundo subsistema
├── ...
├── README.md                  # ⭐ OBLIGATORIO - Overview del sistema
├── ARCHITECTURE.md            # Diseño de alto nivel
├── CMakeLists.txt             # Build configuration
└── CHANGELOG.md               # Historial de cambios

README.md Obligatorio (Nivel 1):

# XX_NOMBRE - Título Descriptivo

**Brief de una línea**

## 🎯 Propósito

Qué problema resuelve este sistema.

## 🏗️ Arquitectura

Diagrama o descripción de subsistemas:
- XX_00_subsystem - Qué hace
- XX_01_subsystem - Qué hace
- ...

## 📖 Documentación

- [Architecture Overview](_docs/architecture/)
- [Latest Audit](_docs/audits/)
- [Development Guides](_docs/guides/)

## 🚀 Quick Start

```bash
# Ejemplo mínimo de uso

📊 Status

  • Version: X.Y.Z
  • Status: Production Ready / In Development / Deprecated
  • Last Updated: YYYY-MM-DD
    ---
    
    ### Nivel 2: Subsistemas (XX_YY_subsystem)
    
    **Ejemplo**: `04_00_type_system/`, `04_02_math_primitives/`
    
    **Estructura Obligatoria**:
    
    XX_YY_subsystem/ ├── YY_00_component/ # Primer componente ├── YY_01_component/ # Segundo componente ├── ... ├── tests/ # ⭐ OBLIGATORIO - Tests unitarios │ ├── test_.cpp │ └── CMakeLists.txt ├── examples/ # RECOMENDADO - Ejemplos de uso │ ├── example_.cpp │ └── README.md ├── benchmarks/ # OPCIONAL - Performance tests │ └── bench_*.cpp ├── README.md # ⭐ OBLIGATORIO ├── CMakeLists.txt # Build configuration └── CHANGELOG.md # RECOMENDADO
    **README.md Obligatorio** (Nivel 2):
    ```markdown
    # Subsystem Name
    
    **Brief description**
    
    ## Purpose
    
    What this subsystem does.
    
    ## Components
    
    - `YY_00_component/` - Description
    - `YY_01_component/` - Description
    
    ## Usage
    
    ```cpp
    // Minimal working example
    #include "subsystem/header.hpp"
    
    int main() {
        // Example code
    }
    

API Reference

Key Functions

  • functionName() - What it does
  • anotherFunction() - What it does

Testing

cd build
ctest -R subsystem_name

Performance

Operation Time Notes
Function1 ~Xms Description

Dependencies

  • Internal: XX_00, XX_01
  • External: C++17 STL

See Also

  • Related Subsystem
  • Architecture
    ---
    
    ### Nivel 3: Componentes (YY_ZZ_component)
    
    **Ejemplo**: `00_fundamental_types/`, `01_simd_types/`
    
    **Estructura Obligatoria**:
    
    YY_ZZ_component/ ├── include/ # OPCIONAL - Headers públicas │ └── component.hpp ├── src/ # OPCIONAL - Implementation │ └── component.cpp ├── tests/ # ⭐ OBLIGATORIO SI HAY CÓDIGO │ ├── test_component.cpp │ └── BUILD_INSTRUCTIONS.md # Si setup especial ├── README.md # ⭐ OBLIGATORIO └── CMakeLists.txt # Si compila
    **README.md Obligatorio** (Nivel 3):
    ```markdown
    # Component Name
    
    Brief description (1 sentence).
    
    ## API
    
    ### Types
    
    ```cpp
    // Main types exposed
    struct MyType {
        // ...
    };
    

Functions

// Key functions
ReturnType functionName(Args...);

Examples

// Minimal example
auto result = functionName(args);

Implementation Notes

  • Design decisions
  • Performance characteristics
  • Edge cases

Testing

# How to run tests
ctest -R component_name
---

## 📝 Templates de Documentación

### Template: README.md (Subsistema)

```markdown
# [Subsystem Name]

**[One-line description of purpose]**

---

## 🎯 Purpose

[2-3 sentences explaining what problem this solves]

---

## 🏗️ Architecture
subsystem/ ├── component_1/ # [Description] ├── component_2/ # [Description] └── component_3/ # [Description]
---

## 💡 Key Concepts

### [Concept 1]
[Explanation]

### [Concept 2]
[Explanation]

---

## 🚀 Quick Start

```cpp
// Minimal working example
#include "[subsystem]/[header].hpp"

int main() {
    // Example code
    return 0;
}


📖 API Reference

Core Types

Type Description
TypeName What it represents

Key Functions

Function Description Time Complexity
functionName() What it does O(1)

🧪 Testing

# Build and run tests
cd build
ctest -R [subsystem_name]

Test Coverage: XX% (goal: 80%+)


⚡ Performance

Operation Benchmark Notes
Operation1 ~Xµs [Context]

🔗 Dependencies

Internal: - XX_YY_other_subsystem - Why needed

External: - C++17 Standard Library - [Optional external deps]


📚 See Also


Status: [Production / Development / Deprecated] Version: X.Y.Z Last Updated: YYYY-MM-DD

---

### Template: ARCHITECTURE.md (Sistema Completo)

```markdown
# [System Name] - Architecture

**[System-level description]**

---

## 🎯 Overview

[High-level description of system purpose and design]

---

## 🏗️ Layer Architecture
┌─────────────────────────────────────┐ │ Layer N: [Name] │ │ [Subsystems in this layer] │ └─────────────────────────────────────┘ ▲ ┌─────────────────────────────────────┐ │ Layer 2: [Name] │ │ [Subsystems] │ └─────────────────────────────────────┘ ▲ ┌─────────────────────────────────────┐ │ Layer 1: [Name] │ │ [Foundation subsystems] │ └─────────────────────────────────────┘
---

## 📦 Subsystem Details

### [Subsystem 1]

**Responsibilities**:
- [Responsibility 1]
- [Responsibility 2]

**Key Components**:
- `component_1` - [Description]
- `component_2` - [Description]

**Dependencies**: [List]

---

## 🔄 Data Flow
[Source] → [Processing] → [Output]
[Explanation of data flow]

---

## 🎨 Design Patterns

### [Pattern 1]
- **Where**: [Subsystem]
- **Why**: [Rationale]
- **Example**: [Code snippet]

---

## 📊 Metrics

| Metric | Value | Target |
|--------|-------|--------|
| Subsystems | X | - |
| Components | Y | - |
| Test Coverage | Z% | 80%+ |

---

## 🔗 Dependencies

[Dependency graph or description]

---

## 📚 References

- [Subsystem Docs](../XX_subsystem/)
- [API Reference](../guides/api_reference.md)


🔍 Checklist de Documentación

Para Cada Nuevo Subsistema

  • README.md con template completo
  • tests/ directory con al menos 1 test
  • examples/ con ejemplo mínimo funcional
  • CMakeLists.txt si compila
  • Entry en CHANGELOG del sistema padre
  • Actualizar README del sistema padre
  • Actualizar ARCHITECTURE.md si afecta diseño

Para Cada Nueva Función Pública

  • Documentar en README del componente
  • Incluir ejemplo de uso
  • Escribir al menos 1 test
  • Documentar complejidad temporal si relevante
  • Documentar thread-safety si relevante

Para Cada Release

  • Actualizar CHANGELOG.md
  • Verificar que todos los README estén actualizados
  • Ejecutar auditoría de completitud
  • Generar métricas de cobertura
  • Actualizar versión en todos los README principales

🤖 Automatización

Scripts Requeridos

  1. validate_docs.ps1 - Verifica que existan READMEs obligatorios
  2. generate_index.ps1 - Genera índice de documentación
  3. check_examples.ps1 - Verifica que ejemplos compilen
  4. audit_completeness.ps1 - Genera reporte de gaps

Hooks de Git

# pre-commit hook
- Verificar que README existe si se añade código
- Validar formato Markdown
- Comprobar links rotos

📊 Niveles de Completitud

Nivel 1: Mínimo Viable ⭐

  • README.md con Purpose y Quick Start
  • Al menos 1 test funcional

Nivel 2: Completo ⭐⭐⭐

  • README.md completo con template
  • Tests con >50% coverage
  • Al menos 1 ejemplo

Nivel 3: Ejemplar ⭐⭐⭐⭐⭐

  • README.md + ARCHITECTURE.md
  • Tests con >80% coverage
  • Múltiples ejemplos
  • Benchmarks si relevante
  • Integrado en _docs/ del sistema

🎯 KPIs de Documentación

Métricas a Trackear

Métrica Cálculo Target
README Coverage READMEs / Subsistemas 100%
Example Coverage Examples / Subsistemas 80%
Test Coverage Tests / Código 80%
Doc Freshness Docs < 3 meses 90%

Auditorías

  • Mensual: Verificar READMEs nuevos
  • Trimestral: Auditoría completa de sistema
  • Anual: Review de arquitectura

🚀 Roadmap de Implementación

Fase 1: Foundation (Semana 1-2)

  • Crear templates en _templates/
  • Implementar scripts de validación
  • Documentar 04_CORE como referencia

Fase 2: Rollout (Semana 3-4)

  • Aplicar estándares a 03_INFRA
  • Aplicar estándares a 05_MODULES
  • Capacitar equipo en estándares

Fase 3: Automation (Semana 5-6)

  • Automatizar generación de índices
  • CI/CD checks para docs
  • Dashboard de métricas

Fase 4: Maintenance (Ongoing)

  • Auditorías trimestrales
  • Actualización de templates
  • Mejora continua

📋 Ejemplos de Referencia

Ejemplar: 04_00_type_system

  • ✅ README completo y detallado
  • ✅ Ejemplos funcionales
  • ✅ Tests comprehensivos
  • ✅ Documentación de performance

Ejemplar: 04_02_math_primitives

  • ✅ README con benchmarks
  • ✅ Performance reports
  • ✅ Múltiples ejemplos
  • ✅ Optimization notes

Necesita Mejora: 04_08_parameter_system

  • ❌ Sin README principal
  • ❌ Sin ejemplos
  • ⚠️ Tests parciales

🔗 Herramientas Recomendadas

Editores Markdown

  • VSCode + Markdown All in One extension
  • Typora para preview WYSIWYG

Diagramas

  • Mermaid para diagramas en Markdown
  • PlantUML para UML detallado
  • Excalidraw para sketches

Validación

  • markdownlint para linting
  • markdown-link-check para links rotos

💡 Mejores Prácticas

DO ✅

  1. Empezar con README.md - Antes de escribir código
  2. Ejemplos mínimos - Que compilen y corran
  3. Actualizar en el momento - No "después"
  4. DRY - Linkear en vez de duplicar
  5. Progressive disclosure - Overview → Details

DON'T ❌

  1. Documentar implementación - Solo API pública
  2. Copy-paste docs - Usar referencias
  3. Docs sin ejemplos - Mostrar, no solo decir
  4. Asumir conocimiento - Explicar términos específicos
  5. Docs desactualizados - Mejor borrar que mentir

📞 Soporte

Para dudas sobre documentación: 1. Consultar este documento 2. Ver ejemplos en 04_00_type_system/ 3. Revisar templates en _templates/ 4. Contactar al maintainer del sistema


Versión: 1.0.0 Última actualización: 2024-10-16 Próxima revisión: 2025-01-16


Este estándar es obligatorio para todo código nuevo en AudioLab.