フィーチャートグル
White-labelデプロイはすべての機能を出荷するわけではありません。フィーチャートグルは主な商品機能をオン/オフできます — デプロイ時に設定で、または後でruntimeに再デプロイなしで。すべての機能デフォルト有効;デプロイメントは変更するもののみをリストします。
モデル
Core.Features.FeatureFlag— ゲート可能な機能のenum:Authoring、Backtesting、Execution、CopyTrading、Ai、PortfolioAgent、Alerts、PropGuard、PropFirm、Accounts、OpenApi、Mcp、Compliance。 Core管理 surface(ダッシュボード、ユーザー、ノード、auth)はゲート可能ではなく、ここには 없습니다。Core.Options.FeaturesOptions— 設定.baseline、App:Featuresからバインド。各プロパティはデフォルトtrue。Core.Features.IFeatureGate— 有效的状態を解決:設定.baselineにオプションのowner-set runtime overrideをオーバーレイ。Infrastructure.Features.FeatureGate実装、overrideを brieflyキャッシュ(FeatureSettings.OverrideCacheTtl)、変更時に無効化。
Runtime overrideはfeature.<FeatureFlag>をキーとするAppSetting行に保存(値true/false)。行なし = 「設定.baselineを使用」。
機能を無効にする2つの方法
1. デプロイメント設定(baseline)
フラグをApp:Features配下falseに設定。例appsettings.json:
{
"App": {
"Features": {
"CopyTrading": false,
"PropGuard": false
}
}
}
または環境変数で(double underscore):
App__Features__CopyTrading=false
Baselineはバックグラウンドワーカー(Nodes.AddNodes)とMCPツール(Mcpサーバー)の起動時登録をゲートするため、設定で無効化されたfeatureはホストされたサービスを開始せず、MCPツールを露出しません。
2. Runtime override(owner)
所有者はSettings → Features(/settings/features)またはAPIから任意の機能をライブでFlipできます:
GET /api/features -> [{ "flag": "CopyTrading", "enabled": true }, ...] (Owner)
PUT /api/features/{flag} body { "enabled": false } -> set override (Owner)
PUT /api/features/{flag} body { "enabled": null } -> clear override (revert) (Owner)
Runtime変更はリクエスト時ゲート(ナビゲーション、API)に即座に有効。バックグラウンドワーカーとMCPツールは起動時にゲート、nextプロセス再起動時にruntime変更を選択。
各ゲートの強制内容
| レイヤー | メカニズム | タイミング |
|---|---|---|
| HTTP API | RouteGroupBuilder.RequireFeature(flag) エンドポイントフィルタ → 無効時404 | Runtime |
| ナビゲーション | NavMenuはIFeatureGate.IsEnabledでリンクを非表示 | Runtime |
| バックグラウンドワーカー | Nodes.AddNodesでの条件付きAddHostedService | 起動時(設定) |
| MCPツール | MCPサーバーの条件付きWithTools<> | 起動時(設定) |
深いリンクで無効化されたfeatureに到達すると空のページが 렌derされます — そのAPIは404を返します; navはそれをさらにsurfaceしません。
フラグ→表面マップ
| フラグ | APIグループ | Nav | ワーカー / MCP |
|---|---|---|---|
| Authoring | /api/cbots、/api/paramsets、/api/builder | cBotsグループ → cBots(per-cBotダイアログのパラメータセット) | MCP CBotTools |
| Backtesting | (/api/instancesを共有) | cBotsグループ → バックテスト | — |
| Execution | /api/instances | cBotsグループ → 実行 | MCP InstanceTools |
| CopyTrading | /api/copy | Copy Trading | CopyEngineSupervisor、OpenApiTokenRefreshService、MCP CopyTools |
| Ai | /api/ai | AIグループ → AI; Settings → AI(キー) | AiRiskGuard、MCP AiTools |
| PortfolioAgent | /api/agent | AIグループ → Portfolio Agent | PortfolioAgentService |
| Alerts | /api/alerts | AIグループ → Alerts | AlertEvaluator |
| PropGuard | /api/prop | Propグループ → Prop Guard | PropGuardService |
| PropFirm | /api/prop-firm | Propグループ → Challenges | — |
| Accounts | /api/ctids | Trading Accounts | — |
| OpenApi | /api/openapi | Settings → Open API | — |
| Mcp | /api/mcp-keys | AIグループ → MCP Keys | — |
| Compliance | /api/compliance | Settings → Legal & Privacy | — |
テスト
- ユニット —
UnitTests/Features/FeaturesOptionsTests.cs: baselineデフォルト、per-flagマッピング。 - 統合 —
IntegrationTests/FeatureGateTests.cs: 設定.baseline、runtime overrideが設定を打ち消し、real Postgresで永続化、クリアでbaselineに revert(real Postgres)。 - E2E —
E2ETests/FeatureToggleTests.cs: runtimeでCopyTradingを無効にするとnavリンクが非表示になり/api/copyが404を返し、再有効化すると两者とも復元。