Přeskočit na hlavní obsah

Feature toggles

White-label deploy vzácně lodní každá schopnost. Feature toggles umožňují operátor otočit hlavní product vlastnosti on/off — na deploy čas přes config, nebo později na runtime, bez redeploy. Všechny vlastnosti výchozí povolené; nasazení pouze seznam ty to změní.

Model​

  • Core.Features.FeatureFlag — enum of gateable vlastnosti: Authoring, Backtesting, Execution, CopyTrading, Ai, PortfolioAgent, Alerts, PropGuard, PropFirm, Accounts, OpenApi, Mcp, Compliance. Core admin povrchy (dashboard, uživatelé, uzly, auth) nikdy gateable, ne zde.
  • Core.Options.FeaturesOptions — config baseline, bound z App:Features. Každá vlastnost výchozí true.
  • Core.Features.IFeatureGate — resolves efektivní stav: config baseline overlay s volitelným owner-set runtime override. Implementováno Infrastructure.Features.FeatureGate, caches overrides stručně (FeatureSettings.OverrideCacheTtl), invalidates na změnu.

Runtime overrides uloženy jako AppSetting řady klíčem feature.<FeatureFlag> (value true/false). Žádný řádek = "use config baseline".

Dva způsoby jak vypnout vlastnost​

1. Deployment konfigurace (baseline)​

Nastavit flag false pod App:Features. Příklad appsettings.json:

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

Nebo přes env vars (double underscore):

App__Features__CopyTrading=false

Baseline gates startup registrace background workerů (Nodes.AddNodes) a MCP nástrojů (Mcp server), takže vlastnost vypnuta v configu nikdy startuje jejího hosted services ani exponuje jejího MCP nástrojů.

2. Runtime override (owner)​

Owner může otočit libovolnou vlastnost live z Settings → Features (/settings/features) nebo API:

GET /api/features -> [{ "flag": "CopyTrading", "enabled": true }, ...] (Owner)
PUT /api/features/{flag} body { "enabled": false } -> nastavit override (Owner)
PUT /api/features/{flag} body { "enabled": null } -> clear override (vrátit) (Owner)

Runtime změny vejdou v platnost okamžitě pro request-time gates (navigace, API). Background workeři a MCP nástrojů gated na startup, sbírají runtime změnu na následující proces restart.

Co každá brána vynucuje​

VrstvaMechanismusTiming
HTTP APIRouteGroupBuilder.RequireFeature(flag) endpoint filtr → 404 když vypnutoRuntime
NavigaceNavMenu skrývá linky via IFeatureGate.IsEnabledRuntime
Background workeřiconditional AddHostedService v Nodes.AddNodesStartup (config)
MCP nástrojůconditional WithTools<> v MCP serveruStartup (config)

Vlastnost dosažena deep link zatímco vypnuto renders prázdná stránka — její API vrátí 404; nav to už nepovrchuje.

Flag → surface mapa​

FlagAPI skupinyNavWorkeři / MCP
Authoring/api/cbots, /api/paramsets, /api/buildercBots skupiny → cBots (param sets per-cBot dialog)MCP CBotTools
Backtesting(shares /api/instances)cBots skupiny → Backtest—
Execution/api/instancescBots skupiny → RunMCP InstanceTools
CopyTrading/api/copyCopy TradingCopyEngineSupervisor, OpenApiTokenRefreshService, MCP CopyTools
Ai/api/aiAI skupiny → AI; Settings → AI (klíč)AiRiskGuard, MCP AiTools
PortfolioAgent/api/agentAI skupiny → Portfolio AgentPortfolioAgentService
Alerts/api/alertsAI skupiny → AlertsAlertEvaluator
PropGuard/api/propProp skupiny → Prop GuardPropGuardService
PropFirm/api/prop-firmProp skupiny → Challenges—
Accounts/api/ctidsTrading Accounts—
OpenApi/api/openapiSettings → Open API—
Mcp/api/mcp-keysAI skupiny → MCP Keys—
Compliance/api/complianceSettings → Legal & Privacy—

Testy​

  • Unit — UnitTests/Features/FeaturesOptionsTests.cs: baseline výchozí, per-flag mapování.
  • Integration — IntegrationTests/FeatureGateTests.cs: config baseline, runtime override beats config a persists jako AppSetting, clearing vrací baseline (reálný Postgres).
  • E2E — E2ETests/FeatureToggleTests.cs: vypnutí CopyTrading na runtime skryje nav link a 404s /api/copy, re-enabling restores obojí.