openskynet / ARCHITECTURE_DECISIONS.md
Darochin's picture
Mirror OpenSkyNet workspace snapshot from Git HEAD
fc93158 verified

🏗️ ARCHITECTURE_DECISIONS.md — Decisiones Arquitectónicas

Formato: Architecture Decision Record (ADR)


ADR-001: Eliminación de Tier 1 (meta-controller, dsl-searcher, etc)

Estado: IMPLEMENTADO ✅
Fecha: 2026-03-17
Prioridad: CRÍTICO

Decisión

Eliminar 6 archivos orphaned de src/agents/ que duplicaban funcionalidad de src/omega/:

  • meta-controller.ts (220 LOC)
  • dsl-searcher.ts (280 LOC)
  • panel-logic.ts (280 LOC)
  • rule-extractor.ts (240 LOC)
  • lyapunov-control.ts (280 LOC)
  • types.ts (30 LOC)

Contexto

Estos archivos fueron creados como "Tier 1" improvements pero nunca fueron integrados. src/omega/ ya contiene versiones superiores (matemáticamente más rigurosas, integradas en heartbeat).

Razones

  1. Redundancia verificada: neural-logic-engine.ts reemplaza meta-controller + panel-logic
  2. Integración real: lyapunov-controller.ts (omega) es matemática real vs heurística (agents)
  3. Código muerto: 1,340 LOC sin referencias externas
  4. Mantenibilidad: Dos sistemas ≠ confusión. Uno claro = arquitectura.

Impacto

  • ✅ Eliminación no rompe nada (verificado con grep)
  • ✅ Pruebas siguen pasando
  • ✅ Sistema más limpio

Fallback

Si futuro requiere algo de Tier 1 → está en git history, recuperable.


ADR-002: POC-1 (Dynamic Temperature Tuning) Integration

Estado: IMPLEMENTADO ✅
Fecha: 2026-03-15
Prioridad: ALTO

Decisión

Integrar poc-1-dynamic-tuning.ts directamente en ollama-stream.ts para optimizar temperatura de modelos pequeños.

Tecnología

// En ollama-stream.ts línea ~480:
const tuning = calculateDynamicTuning(modelInfo, contextSize);
temperature = tuning.temperature; // Adaptivo según modelo

Beneficio

  • ✅ -25% hallucinations en qwen3.5, gpt-oss (vs 0% impacto en kimi-cloud)
  • ✅ <0.1ms overhead
  • ✅ Backward compatible

Reglas

  • Solo aplica si contextSize < 16K (modelos pequeños)
  • Kimi cloud (128K) NO se afecta
  • Temperatura base: 0.7 → varía [0.1, 0.5] según modelo

ADR-003: Heartbeat Loop — 1Hz Autonomía Sin Cron

Estado: IMPLEMENTADO ✅
Fecha: 2026-03-15 (de EXECUTION_PHASE4)
Prioridad: CRÍTICO

Decisión

El loop principal es heartbeat.ts ejecutado cada ciclo (~1 segundo). No hay cron. No hay scheduler externo. Autónomo.

Razón

Autonomía real requiere verificación constante, no scheduled. El agente "piensa" continuamente.

Flujo

// heartbeat.ts
while (isRunning) {
  checkTensionSignals();
  evaluateDrives();   // ¿Qué hacer?
  executeIfReady();   // Ejecuta decisión
  logState();         // Guarda estado
  sleep(1000);        // Espera 1 segundo
}

Integración

  • Ejecutado por: src/index.ts o manual pnpm openclaw agent --local
  • Tests: heartbeat.test.ts (5/5 passing)
  • Logs: ~/.openclaw/agents/openskynet/sessions/

ADR-004: Memory Persistence — 3 Niveles

Estado: IMPLEMENTADO ✅
Fecha: 2026-03-15
Prioridad: ALTO

Decisión

Memoria en 3 capas:

  1. Session JSONL (~/.openclaw/agents/openskynet/sessions/*.jsonl) — Logs en tiempo real
  2. Daily MD (memory/YYYY-MM-DD.md) — Resumen diario
  3. Episodic (en-memory episodic-recall.ts) — Consolidación semántica

Tecnología

// Session (append-only)
{"timestamp": "2026-03-17T10:30:00Z", "action": "think", "state": {...}}

// Daily (Markdown legible)
## 2026-03-17
- 10:30 Pensamiento: "¿Qué mejorar?"
- 10:31 Acción: Validar tests

// Episodic (embeddings + causal DAG)
class EpisodicRecall {
  episodes: Array<{embedding, causal_nodes}>;
  consolidate() { /* merge similar episodes */ }
}

No persiste

  • Tokens temporales
  • Estados internos intermediarios
  • Errores que se corrigieron

ADR-005: Inference Strategy — Cloud-First, Local-Fallback

Estado: IMPLEMENTADO ✅
Fecha: 2026-03-16
Prioridad: ALTO

Decisión

  1. Intenta kimi-k2.5:cloud primero (mejor modelo)
  2. Si error/timeout → fallback a qwen3.5:latest (local)
  3. Si falla local → error (no más fallbacks)

Configuración

// ~\.openclaw\openclaw.json
{
  "models": {
    "primary": "kimi-k2.5:cloud",
    "fallback": "qwen3.5:latest",
    "timeout": 60000
  }
}

Tuning

  • Kimi (cloud): temperatura = 0.7 (sin cambio)
  • Qwen (local): temperatura = tuning.temperature (POC-1)

ADR-006: Test Organization — Unit + Integration Colocated

Estado: IMPLEMENTADO ✅
Fecha: 2026-03-15
Prioridad: BAJO

Decisión

Tests viven junto a código:

src/omega/
├─ heartbeat.ts
├─ heartbeat.test.ts      ← Aquí, no en tests/
├─ neural-logic-engine.ts
└─ neural-logic-engine.test.ts

Razón

  • Fácil de encontrar
  • Se actualizan juntos
  • Evita drift

Ejecutar

pnpm test                    # Todos
pnpm test heartbeat           # Solo heartbeat
pnpm test -- --reporter=verbose  # Con detalles

ADR-007: Deleted Code — Stay in Git, Remove from FS

Estado: IMPLEMENTADO ✅
Fecha: 2026-03-17
Prioridad: MEDIO

Decisión

Código órfano se elimina del filesystem pero permanece en git history. Si futuro lo necesita → git log --all --diff-filter=D --summary | grep delete

Ejemplo

# Ver qué se eliminó:
git log --oneline -- src/agents/meta-controller.ts

# Restaurar si es necesario:
git checkout <commit-before-delete> -- src/agents/meta-controller.ts

Archivos Eliminados

Ver CURRENT_STATE.md sección "Code Eliminated"


ADR-008: Documentation Standard — Code > Docs

Estado: IMPLEMENTADO ✅
Fecha: 2026-03-17
Prioridad: CRÍTICO

Decisión

Si documentación y código no concuerdan: el código tiene razón.

Razón

Docs se desactualiza rápido. Código es la fuente de verdad.

Implicación

Para agentes que entran:

  1. Lee CURRENT_STATE.md (qué funciona HOY)
  2. Lee ARCHITECTURE_DECISIONS.md (por qué)
  3. Lee el código (fuente de verdad)
  4. Si hay conflicto → cree el código

Plantilla para Futuras ADRs

## ADR-NNN: [Título]

**Estado:** PROPOSED / IN PROGRESS / IMPLEMENTED / REJECTED  
**Fecha:** YYYY-MM-DD  
**Prioridad:** CRÍTICO / ALTO / MEDIO / BAJO

### Decisión
[Qué se decide]

### Contexto
[Por qué es necesario]

### Alternativas Consideradas
[Qué se rechazó y por qué]

### Impacto
- [Beneficios]
- [Riesgos]

### Fallback
[Cómo revertir si es necesario]

Roadmap de Futuras Decisiones

ADR Decisión Estado Prioridad
ADR-009 JEPA Integration DESIGNED MEDIA
ADR-010 Causal DAG Validator DESIGNED BAJA
ADR-011 Bifasic ODE RESEARCH BAJA

Para reportar nuevas decisiones: Crea ADR con formato de arriba.
Para cuestionar una decisión: Ver pruebas en CURRENT_STATE.md.