chore: auto-commit (286 archivos)

- .claude/agents/fn-orquestador/SKILL.md
- .claude/commands/fn_claude.md
- .claude/rules/INDEX.md
- .claude/rules/cpp_apps.md
- .claude/rules/ids_naming.md
- CHANGELOG.md
- apps/dag_engine/README.md
- apps/dag_engine/api.go
- apps/dag_engine/dags_migrated/example.yaml
- apps/dag_engine/dags_migrated/example_lineage_tracking.yaml
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-16 16:33:22 +02:00
parent d6175964e4
commit 212875ed0d
290 changed files with 12703 additions and 19778 deletions
@@ -0,0 +1,65 @@
# 0088 — Trading & Skill Management Roadmap
**Status:** pendiente
**Created:** 2026-05-14
**Type:** planning
**Related:** 0085 (telemetry), 0086 (delegation), 0087 (capability discovery), 0068 (e2e validation), 0069 (autonomous loop)
**Sub-issues:** 0088a0088j
## Problema
Trading manual (multi-fuente, multi-cuenta) es una habilidad medible que se beneficia del mismo bucle reactivo que el registry: CONSTRUIR → EJECUTAR → RECOPILAR → ANALIZAR → MEJORAR. Falta la instanciacion concreta: ledger inmutable, broker connectors, strategy contract, risk gates, reflection log y un live runner gobernado por assertions. El registro ya tiene primitivas puras de finance (SMA/EMA/RSI/Bollinger/VWAP/Sharpe/Drawdown/GBM/Avellaneda-Stoikov/Hawkes) e impuras minimas (`fetch_ohlcv`, `stream_ticks`, `tick_to_ohlcv`, `write_ohlcv_to_parquet`, `load_ohlcv_from_duckdb`), pero no hay broker integration, ledger ni runner.
Objetivo: tratar **trading como skill autoiterado** sobre el bucle reactivo, con metricas explicitas (PnL realizado, drawdown, sharpe live vs backtest, slippage, win-rate, adherencia a reflection log) que se evaluan por assertions y generan proposals automaticas.
## Filosofia
1. **Skill = control loop con ledger inmutable**. Sin INSERT-only ledger no hay verdad; sin verdad no hay mejora.
2. **Paper-first**. Adapter `broker_paper` cumple la misma interfaz que cualquier broker real. Switch por config.
3. **Reflection obligatoria**. La UI del journal fuerza post-mortem antes de cerrar un trade. Sin reflexion, el bucle no progresa.
4. **Kill-switch como funcion del registry**, invocable desde CLI/UI/cron. Definida ANTES del primer broker live.
5. **Bucle reactivo del registry == bucle reactivo del skill**. Las assertions que vigilan al runner son del mismo tipo que las que vigilan a las apps.
## Pilares + sub-issues
| # | Sub-issue | Pieza | Tipo |
|---|---|---|---|
| 0088a | Project scaffolding `projects/trading/` + vault `market_data` | infra |
| 0088b | Capability group `market_data` + adapters (binance, yfinance, alphavantage; cpp/py) | feature |
| 0088c | Capability group `broker` + interface comun + adapter `broker_paper` | feature |
| 0088d | App `portfolio_tracker` (ledger INSERT-only + sqlite_api + Mantine UI) | feature |
| 0088e | Capability group `strategy` + contrato Strategy + 2 pure strategies de referencia | feature |
| 0088f | Capability group `risk` (kelly, max_loss, exposure_cap, correlation_filter) + kill_switch | feature |
| 0088g | App `backtester` (corre Strategy contra historico, produce reporte deterministico) | feature |
| 0088h | App `live_runner` (service, paper-only on master; broker real detras de feature flag OFF) | feature |
| 0088i | App `trading_journal` (reflection log + UI con tags + screenshots) | feature |
| 0088j | Wiring del bucle reactivo: `e2e_checks` + assertions especificas de trading + proposals automaticas | infra |
## Decisiones criticas (resolver antes de 0088c)
- **Multi-account, multi-currency, multi-asset desde dia 1** en el schema del ledger. Migracion posterior es dolorosa.
- **`client_order_id` deterministico** para idempotencia. Hash de `(strategy_id, intent_ts, intent_hash)`.
- **Reconciliacion** broker ↔ ledger en cada ciclo del live runner. Discrepancia > epsilon → halt + proposal.
- **Backtest != live**. Assertion sobre `|sharpe_backtest - sharpe_live|` y sobre `slippage_realized - slippage_modeled`.
- **Datos sensibles**. Credenciales de broker en `~/.fn_secrets` o gestor externo, nunca en `operations.db`.
## Plan de ejecucion
Tres tandas, cada una mergeable a master con master desplegable:
- **Tanda A (foundations)**: 0088a + 0088d (ledger sin broker) + 0088f (risk + kill_switch como funciones puras).
- **Tanda B (paper loop cerrado)**: 0088b + 0088c (solo paper) + 0088e + 0088g.
- **Tanda C (live + bucle reactivo)**: 0088h (behind flag OFF) + 0088i + 0088j. Activacion live = commit explicito que flip-flop el flag tras N sesiones paper estables.
## Aceptacion del roadmap
- Cada sub-issue cerrado con su `e2e_checks` declarado en `app.md` cuando aplique.
- `docs/capabilities/trading.md` (o split: market_data / broker / strategy / risk / journal) listando primitivas reutilizables.
- Kill-switch invocable: `./fn run halt_all_strategies_py_finance` (o equivalente). Verificable en frio.
- Primer ciclo paper de 7 dias con ledger reconciliado, reflection log >= 1 entry por trade, assertions pasadas o explicadas via proposals.
## No-objetivos
- Optimizacion HFT, latencia sub-ms, market making real en exchange.
- Multi-tenant (esto es para uso personal).
- Estrategias proprietarias secretas — el registry es publico-local, cualquier estrategia debe encajar como funcion pura testeable. Edge se protege via parametros en `~/.fn_secrets/strategies.yaml`, no via codigo oculto.