a3f75d61ec
Reorganizacion de dev/issues en subcarpetas (completed/, cpp/, gamedev/, kanban/, trading/, imagegen/, matrix/) y cambios acumulados en cmd/fn/pyrunner, .claude/commands y settings. Trabajo de otro LLM/sesion, commiteado a peticion del usuario para desbloquear el working tree. Excluido logs/ardour_mcp_server.log (ruido).
2.3 KiB
2.3 KiB
id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags
| id | title | status | type | domain | scope | priority | depends | blocks | related | created | updated | tags | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0088f | Trading: capability group `risk` + kill_switch | pendiente | feature |
|
multi-app | alta |
|
2026-05-17 | 2026-05-17 |
0088f — Trading: capability group risk + kill_switch
Status: pendiente Created: 2026-05-14 Type: feature Parent: 0088 Depends: 0088a Blocks: 0088h (live_runner no arranca sin esto)
Problema
Cualquier intent emitido por una Strategy debe pasar por un risk gate antes de tocar el broker. El kill_switch debe ser invocable desde CLI/cron/UI antes de que exista un broker live — fail-safe absoluto.
Piezas
- Funciones puras:
position_size_kelly_py_finance(edge, variance, bankroll, kelly_fraction).position_size_fixed_risk_py_finance(stop_distance, risk_per_trade_pct, equity).cap_max_loss_per_trade_py_finance(intent, stop_price, equity, max_loss_pct).cap_exposure_py_finance(intent, current_exposure, exposure_limit).filter_correlation_py_finance(intents, current_positions, correlation_matrix, max_corr).apply_risk_pipeline_py_finance(intents, portfolio, risk_config) -> list[OrderIntent](pipeline puro que compone las anteriores).
- Funcion impura
halt_all_strategies_py_finance(reason):- Escribe flag
halted=trueen~/.fn_state/trading_halt.json(o tablasystem_stateen ledger). - Notifica (telegram via 0061 si aplica).
- Idempotente: re-llamar no falla.
- Escribe flag
- Funcion pura
is_halted_py_finance(state_path) -> boolque el live_runner consulta cada ciclo. - Funcion
release_halt_py_finance(reason)(impura, escribe). Solo via CLI manual, NO via API. - Tag
risk. Pagina madredocs/capabilities/risk.md. - Tests deterministicos sobre cada cap/filter.
Aceptacion
./fn run halt_all_strategiesdeja el sistema en estado halted en frio (verificable conis_halted).- Cualquier intent que falle un cap retorna
[](no se emite), motivo logueado en operations.db del live_runner. - Kill_switch invocable sin que el live_runner este corriendo (state file persistente).
No-objetivos
- Risk dinamico aprendido (eso es feature futura). Risk_config se lee de YAML.
- UI para risk_config: editable a mano en YAML primero.