Saltar al contenido principal

Alternancias de características

Las implementaciones de etiqueta blanca rara vez envían cada capacidad. Las alternancias de características permiten que operador active/desactive características principales del producto — en tiempo de implementación vía configuración, o después en tiempo de ejecución, sin redeploy. Todas las características están habilitadas de forma predeterminada; la implementación solo lista las que cambia.

Modelo​

  • Core.Features.FeatureFlag — enumeración de características controlables: Authoring, Backtesting, Execution, CopyTrading, Ai, PortfolioAgent, Alerts, PropGuard, PropFirm, Accounts, OpenApi, Mcp, Compliance. Superficies de administrador Core (panel de control, usuarios, nodos, autenticación) nunca controlables, no aquí.
  • Core.Options.FeaturesOptions — línea base de configuración, vinculada desde App:Features. Cada propiedad por defecto true.
  • Core.Features.IFeatureGate — resuelve estado efectivo: línea base de configuración superpuesta con invalidación opcional de propietario-establecida en tiempo de ejecución. Implementada por Infrastructure.Features.FeatureGate, cachés de invalidación brevemente (FeatureSettings.OverrideCacheTtl), invalida en cambio.

Las invalidaciones en tiempo de ejecución se almacenan como filas AppSetting con clave feature.<FeatureFlag> (valor true/false). Sin fila = "usar línea base de configuración".

Dos formas de deshabilitar una característica​

1. Configuración de implementación (línea base)​

Establece bandera false bajo App:Features. Ejemplo appsettings.json:

{
"App": {
"Features": {
"CopyTrading": false,
"PropGuard": false
}
}
}

O vía variables de entorno (doble guion bajo):

App__Features__CopyTrading=false

Línea base de compuertas registro de inicio de trabajadores de fondo (Nodes.AddNodes) y herramientas MCP (Mcp servidor), por lo que característica deshabilitada en configuración nunca inicia sus servicios alojados ni expone sus herramientas MCP.

2. Invalidación en tiempo de ejecución (propietario)​

El propietario puede voltear cualquier característica en vivo desde Configuración → Características (/settings/features) o API:

GET /api/features -> [{ "flag": "CopyTrading", "enabled": true }, ...] (Propietario)
PUT /api/features/{flag} cuerpo { "enabled": false } -> establecer invalidación (Propietario)
PUT /api/features/{flag} cuerpo { "enabled": null } -> limpiar invalidación (revertir) (Propietario)

Los cambios en tiempo de ejecución toman efecto inmediatamente para compuertas en tiempo de solicitud (navegación, API). Trabajadores de fondo y herramientas MCP controladas en inicio, recogen cambio en tiempo de ejecución en reinicio de proceso siguiente.

Qué cada compuerta aplica​

CapaMecanismoTiempo
HTTP APIRouteGroupBuilder.RequireFeature(flag) filtro de punto final → 404 cuando deshabilitadoTiempo de ejecución
NavegaciónNavMenu oculta enlaces vía IFeatureGate.IsEnabledTiempo de ejecución
Trabajadores de fondoAddHostedService condicional en Nodes.AddNodesInicio (configuración)
Herramientas MCPWithTools<> condicional en servidor MCPInicio (configuración)

Característica alcanzada por enlace profundo mientras deshabilitada renderiza página vacía — su API devuelve 404; nav ya no la muestra.

Mapa Bandera → superficie​

BanderaGrupos de APINavTrabajadores / MCP
Authoring/api/cbots, /api/paramsets, /api/buildergrupo cBots → cBots (conjuntos de params diálogo por-cBot)MCP CBotTools
Backtesting(comparte /api/instances)grupo cBots → Backtest—
Execution/api/instancesgrupo cBots → EjecutarMCP InstanceTools
CopyTrading/api/copyCopia de tradingCopyEngineSupervisor, OpenApiTokenRefreshService, MCP CopyTools
Ai/api/aigrupo IA → IA; Configuración → IA (clave)AiRiskGuard, MCP AiTools
PortfolioAgent/api/agentgrupo IA → Agente de CarteraPortfolioAgentService
Alerts/api/alertsgrupo IA → AlertasAlertEvaluator
PropGuard/api/propgrupo Prop → Guardia PropPropGuardService
PropFirm/api/prop-firmgrupo Prop → Desafíos—
Accounts/api/ctidsCuentas de Trading—
OpenApi/api/openapiConfiguración → Open API—
Mcp/api/mcp-keysgrupo IA → Claves MCP—
Compliance/api/complianceConfiguración → Legal y Privacidad—

Pruebas​

  • Unidad — UnitTests/Features/FeaturesOptionsTests.cs: predeterminados de línea base, mapeo por-bandera.
  • Integración — IntegrationTests/FeatureGateTests.cs: línea base de configuración, invalidación en tiempo de ejecución vence configuración y persiste como AppSetting, limpiar revierte a línea base (Postgres real).
  • E2E — E2ETests/FeatureToggleTests.cs: deshabilitación de CopyTrading en tiempo de ejecución oculta su enlace nav y 404s /api/copy, reinhabilitación restaura ambos.