# TASK-01: Add Kill Switch + Verbose Logging Toggle **File:** `src/NT8.Adapters/Strategies/NT8StrategyBase.cs` **Priority:** CRITICAL **Estimated time:** 45 min **No dependencies** --- ## Exact Changes Required ### 1. Add two new NinjaScript properties to the `#region User-Configurable Properties` block Add these after the existing `MaxContracts` property: ```csharp [NinjaScriptProperty] [Display(Name = "Kill Switch (Flatten + Stop)", GroupName = "Emergency Controls", Order = 1)] public bool EnableKillSwitch { get; set; } [NinjaScriptProperty] [Display(Name = "Verbose Logging", GroupName = "Debug", Order = 1)] public bool EnableVerboseLogging { get; set; } ``` ### 2. Add a private field near the other private fields at the top of the class ```csharp private bool _killSwitchTriggered; ``` ### 3. Set defaults in `OnStateChange` → `State.SetDefaults` block, after the existing defaults ```csharp EnableKillSwitch = false; EnableVerboseLogging = false; _killSwitchTriggered = false; ``` ### 4. Add kill switch check at the TOP of `OnBarUpdate()`, before EVERYTHING else The very first lines of `OnBarUpdate()` must become: ```csharp protected override void OnBarUpdate() { // Kill switch check — must be first if (EnableKillSwitch) { if (!_killSwitchTriggered) { _killSwitchTriggered = true; Print(string.Format("[SDK] KILL SWITCH ACTIVATED at {0} — flattening all positions.", Time[0])); try { ExitLong("KillSwitch"); ExitShort("KillSwitch"); } catch (Exception ex) { Print(string.Format("[SDK] Kill switch flatten error: {0}", ex.Message)); } } return; } // Existing guards follow unchanged if (!_sdkInitialized || _sdkStrategy == null) { ... } ... ``` ### 5. Add verbose logging to `ProcessStrategyIntent()` — wrap existing Print calls Replace the existing bare `Print(...)` calls in `ProcessStrategyIntent()` with guarded versions: ```csharp // Change every Print(...) inside ProcessStrategyIntent() to: if (EnableVerboseLogging) Print(string.Format("...existing message...")); ``` The `Print` call that shows the intent being generated in `OnBarUpdate` (not in `ProcessStrategyIntent`) should remain unguarded — that one is important. --- ## Acceptance Criteria - [ ] `EnableKillSwitch` visible in NT8 strategy parameter dialog under "Emergency Controls" - [ ] `EnableVerboseLogging` visible under "Debug" - [ ] Setting `EnableKillSwitch = true` mid-run causes `ExitLong("KillSwitch")` and `ExitShort("KillSwitch")` on next bar - [ ] After kill switch triggers, every subsequent bar returns immediately (no strategy logic runs) - [ ] `verify-build.bat` passes with zero errors --- ## Do NOT Change - Constructor or `InitializeSdkComponents()` - `SubmitOrderToNT8()` - Any OMS, Risk, Sizing, or Strategy logic