Back to Automation
Campaign Lab

Optimization Campaign Control Center

Govern scheduled research campaigns, monitor validation decisions, detect operational risk, and keep your model evolution disciplined, auditable, and alive.

Workflow Idle 1 Campaigns 1 Enabled
Operator Readout
Latest Recommendation
N/A
Latest Final Decision
N/A
Next Schedule
Optimization Campaign Daily
11:00
Latest Workflow Status
Failed
Active Campaigns
1
Scheduled: 0
Campaign Inventory
1
Enabled: 1
Completed Campaigns
0
Failed: 0
Workflow State
Idle
Latest: Failed
Latest Recommendation
N/A
Decision: N/A
System Risk
0
Missing schedule: 0
Live Spotlight

Active Campaign

The production research program currently governing automated optimization.
Active
Minutes Calibration Sprint 01
minutes-calibration-sprint-01
Schedule
Optimization Campaign Daily
11:00
Research Lane
Minutes
Target Metric
MinutesMae
Search Mode
StructuredAdaptive
Runs Completed
6 / 10
No-Improvement Streak
1
Last Recommendation
N/A
Last Improvement
N/A
Last Holdout Delta
N/A
Last Final Decision
N/A
Last Stop Reason
N/A
Stop Rules
Stop on Promote • Hard end: 2026-04-05
Campaign Inventory

All Campaigns

Lifecycle, schedule, latest outcome, and operational posture for every campaign.
Active
Minutes Calibration Sprint 01
minutes-calibration-sprint-01
Minutes MinutesMae StructuredAdaptive 90d
Schedule
Optimization Campaign Daily
11:00
Runs
6 / 10
Latest Outcome
N/A
Decision: N/A
Signal
Improvement: N/A
Holdout: N/A
Latest Activity
Failed
2026-03-31 22:20
Operational Health

System Health

Sanity checks and operational risk indicators for campaign automation.
Active Campaign Count 1
Running Campaign Runs 0
Enabled Without Schedule 0
Enabled Invalid State 0
Latest Failed Run
Minutes Calibration Sprint 01
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while saving the entity changes. See the inner exception for details. ---> Microsoft.Data.SqlClient.SqlException (0x80131904): A transport-level error ...
Run Timeline

Recent Campaign Runs

Latest experiments, winner selection, validation flow, and execution traceability.
Minutes Calibration Sprint 01
Run #8
Failed
Model Flow
Baseline: 45
Anchor: 45
Winner: N/A
Decision
N/A
Final: N/A
Signal
Improvement: N/A
Holdout: N/A
Timing
Started: 2026-03-31 22:14
Finished: 2026-03-31 22:20
Duration: 6.2m
Traceability
Experiment: N/A
Validation: N/A
Bootstrapped campaign run 8 for 'Minutes Calibration Sprint 01'. Baseline model version = 45. Search anchor model version = 45. Campaign run was auto-failed because the automation workflow failed before completion.
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while saving the entity changes. See the inner exception for details. ---> Microsoft.Data.SqlClient.SqlException (0x80131904): A transport-level error has occurred when sending the request to the server. (provider: Session Provider, error: 19 - Physical connection is not usable) at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke() at System.Threading.Tasks.Task.<>c.<.cctor>b__292_0(Object obj) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) --- End of stack trace from previous location --- at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread) --- End of stack trace from previous location --- at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken) ClientConnectionId:38891e7a-2564-4526-858d-82ca0bceaa91 Error Number:-1,State:0,Class:20 --- End of inner exception stack trace --- at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.SqlServer.Update.Internal.SqlServerModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChangesAsync(IList`1 entries, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(IList`1 entriesToSave, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(StateManager stateManager, Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func`4 operation, Func`4 verifySucceeded, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.DbContext.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.DbContext.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken) at BettingOdds.App.Projections.Services.Optimization.ProjectionExperimentRunner.ExecuteCandidateAsync(Int32 projectionExperimentId, String targetMetric, Int32 projectionExperimentCandidateId, Int32 projectionModelVersionId, String candidateLabel, IReadOnlyCollection`1 gameIds, CancellationToken ct) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Projections\Services\Optimization\ProjectionExperimentRunner.cs:line 182 at BettingOdds.App.Projections.Services.Optimization.ProjectionExperimentRunner.ExecuteCandidateAsync(Int32 projectionExperimentId, String targetMetric, Int32 projectionExperimentCandidateId, Int32 projectionModelVersionId, String candidateLabel, IReadOnlyCollection`1 gameIds, CancellationToken ct) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Projections\Services\Optimization\ProjectionExperimentRunner.cs:line 183 at BettingOdds.App.Projections.Services.Optimization.ProjectionExperimentRunner.<>c__DisplayClass4_0.<<RunExperimentAsync>b__0>d.MoveNext() in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Projections\Services\Optimization\ProjectionExperimentRunner.cs:line 87 --- End of stack trace from previous location --- at System.Threading.Tasks.Parallel.<>c__53`1.<<ForEachAsync>b__53_0>d.MoveNext() --- End of stack trace from previous location --- at BettingOdds.App.Projections.Services.Optimization.ProjectionExperimentRunner.RunExperimentAsync(Int32 projectionExperimentId, CancellationToken ct) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Projections\Services\Optimization\ProjectionExperimentRunner.cs:line 78 at BettingOdds.App.Projections.Services.Optimization.ProjectionSearchOrchestrator.RunStructuredAdaptiveSearchAsync(String experimentName, String targetMetric, String rangeType, Int32 baseProjectionModelVersionId, IReadOnlyCollection`1 searchSpaces, Int32 candidateCount, IReadOnlyCollection`1 historySignals, IReadOnlyCollection`1 directionalPreferences, ProjectionSearchLanePolicy lanePolicy, String createdBy, Nullable`1 startUtc, Nullable`1 endUtc, IReadOnlyCollection`1 fixedProjectionModelVersionIds, CancellationToken ct) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Projections\Services\Optimization\ProjectionSearchOrchestrator.cs:line 301 at BettingOdds.App.Projections.Services.Optimization.Planning.StructuredAdaptiveProjectionSearchService.RunStructuredAdaptiveSearchAsync(StructuredAdaptiveSearchRequest request, CancellationToken ct) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Projections\Services\Optimization\Planning\StructuredAdaptiveProjectionSearchService.cs:line 120 at BettingOdds.App.Automation.CampaignExperiments.ProjectionOptimizationCampaignExperimentFactory.CreateExperimentAsync(Int64 projectionOptimizationCampaignRunId, String createdBy, CancellationToken ct) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Automation\CampaignExperiments\ProjectionOptimizationCampaignExperimentFactory.cs:line 129 at BettingOdds.App.Automation.Steps.CampaignExperiments.OptimizationCampaignCreateExperimentStepExecutor.ExecuteAsync(AutomationExecutionContext context, CancellationToken ct) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Automation\Steps\CampaignExperiments\OptimizationCampaignCreateExperimentStepExecutor.cs:line 44 at BettingOdds.App.Automation.Services.AutomationWorkflowRunner.RunManualAsync(AutomationManualRunRequest request, CancellationToken ct) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Automation\Services\AutomationWorkflowRunner.cs:line 136
Minutes Calibration Sprint 01
Run #7
Failed
Model Flow
Baseline: 45
Anchor: 45
Winner: 45
Decision
N/A
Final: N/A
Signal
Improvement: 0
Holdout: N/A
Timing
Started: 2026-03-24 21:12
Finished: 2026-03-24 21:40
Duration: 27.8m
Traceability
Experiment: 16
Validation: N/A
Bootstrapped campaign run 7 for 'Minutes Calibration Sprint 01'. Baseline model version = 45. Search anchor model version = 45. Created experiment 16 ('Minutes Calibration Sprint 01 | Run 7 | 2026-03-24 21:12') from campaign 'Minutes Calibration Sprint 01' using search anchor model version 45. Baseline model version 45 was explicitly included in the experiment candidate set. Experiment 16 was already completed before the run-experiment step. Skipped rerun. Winner selected from experiment 16: model version 45. Improvement vs baseline = 0. Campaign run was auto-failed because the automation workflow failed before completion.
System.InvalidOperationException: Baseline and challenger model version ids must be different. at BettingOdds.App.Projections.Services.Validation.ProjectionValidationWindowBuilder.ValidateRequest(ProjectionValidationCreateRequest request) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Projections\Services\Optimization\Validation\ProjectionValidationWindowBuilder.cs:line 91 at BettingOdds.App.Projections.Services.Validation.ProjectionValidationWindowBuilder.BuildWindows(ProjectionValidationCreateRequest request) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Projections\Services\Optimization\Validation\ProjectionValidationWindowBuilder.cs:line 14 at BettingOdds.App.Projections.Services.Validation.ProjectionValidationService.CreateValidationRunAsync(ProjectionValidationCreateRequest request, CancellationToken ct) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Projections\Services\Optimization\Validation\ProjectionValidationService.cs:line 38 at BettingOdds.App.Automation.Steps.CampaignExperiments.OptimizationCampaignValidationStepExecutor.ExecuteAsync(AutomationExecutionContext context, CancellationToken ct) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Automation\Steps\CampaignExperiments\OptimizationCampaignValidationStepExecutor.cs:line 147 at BettingOdds.App.Automation.Services.AutomationWorkflowRunner.RunManualAsync(AutomationManualRunRequest request, CancellationToken ct) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Automation\Services\AutomationWorkflowRunner.cs:line 136
Minutes Calibration Sprint 01
Run #6
Succeeded
Model Flow
Baseline: 45
Anchor: 45
Winner: 81
Decision
Reject
Final: Reject
Signal
Improvement: N/A
Holdout: 0.32548
Timing
Started: 2026-03-24 19:45
Finished: 2026-03-24 20:14
Duration: 29.4m
Traceability
Experiment: 15
Validation: 8
Stop Reason: Max runs reached.
Bootstrapped campaign run 6 for 'Minutes Calibration Sprint 01'. Baseline model version = 45. Search anchor model version = 45. Created experiment 15 ('Minutes Calibration Sprint 01 | Run 6 | 2026-03-24 19:45') from campaign 'Minutes Calibration Sprint 01' using search anchor model version 45. Experiment 15 was already completed before the run-experiment step. Skipped rerun. Winner selected from experiment 15: model version 81. Improvement vs baseline = null. Campaign finalized. Recommendation=Reject, FinalDecision=Reject, ValidationPrimaryDelta=1.729747, HoldoutDelta=0.32548, StopReason=Max runs reached..
Minutes Calibration Sprint 01
Run #5
Succeeded
Model Flow
Baseline: 45
Anchor: 45
Winner: 75
Decision
Reject
Final: Reject
Signal
Improvement: 1.729747
Holdout: 0.32548
Timing
Started: 2026-03-24 18:05
Finished: 2026-03-24 18:05
Duration: -2s
Traceability
Experiment: 14
Validation: 7
Bootstrapped campaign run 5 for 'Minutes Calibration Sprint 01'. Baseline model version = 45. Search anchor model version = 45. Created experiment 14 ('Minutes Calibration Sprint 01 | Run 5 | 2026-03-24 18:05') from campaign 'Minutes Calibration Sprint 01' using search anchor model version 45. Experiment 14 was already completed before the run-experiment step. Skipped rerun. Winner selected from experiment 14: model version 75. Improvement vs baseline = null. Campaign finalized. Recommendation=Reject, FinalDecision=Reject, Improvement=1.729747, Holdout=0.32548, StopReason=none.
Minutes Calibration Sprint 01
Run #4
Failed
Model Flow
Baseline: 45
Anchor: 45
Winner: 69
Decision
N/A
Final: N/A
Signal
Improvement: N/A
Holdout: N/A
Timing
Started: 2026-03-24 17:27
Finished: 2026-03-24 17:53
Duration: 26.3m
Traceability
Experiment: 13
Validation: N/A
Bootstrapped campaign run 4 for 'Minutes Calibration Sprint 01'. Baseline model version = 45. Search anchor model version = 45. Created experiment 13 ('Minutes Calibration Sprint 01 | Run 4 | 2026-03-24 17:27') from campaign 'Minutes Calibration Sprint 01' using search anchor model version 45. Experiment 13 was already completed before the run-experiment step. Skipped rerun. Winner selected from experiment 13: model version 69. Improvement vs baseline = null. Campaign run was auto-failed because the automation workflow failed before completion.
System.InvalidOperationException: Nullable object must have a value. at System.Nullable`1.get_Value() at BettingOdds.App.Automation.Steps.CampaignExperiments.OptimizationCampaignValidationStepExecutor.ExecuteAsync(AutomationExecutionContext context, CancellationToken ct) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Automation\Steps\CampaignExperiments\OptimizationCampaignValidationStepExecutor.cs:line 58 at BettingOdds.App.Automation.Services.AutomationWorkflowRunner.RunManualAsync(AutomationManualRunRequest request, CancellationToken ct) in C:\Users\Cesar\Documents\bettingodds2\BettingOdds\App\Automation\Services\AutomationWorkflowRunner.cs:line 132
Minutes Calibration Sprint 01
Run #3
Failed
Model Flow
Baseline: 45
Anchor: 45
Winner: N/A
Decision
N/A
Final: N/A
Signal
Improvement: N/A
Holdout: N/A
Timing
Started: 2026-03-24 16:27
Finished: 2026-03-24 17:16
Duration: 49.7m
Traceability
Experiment: 12
Validation: N/A
Bootstrapped campaign run 3 for 'Minutes Calibration Sprint 01'. Baseline model version = 45. Search anchor model version = 45. Created experiment 12 ('Minutes Calibration Sprint 01 | Run 3 | 2026-03-24 16:27') from campaign 'Minutes Calibration Sprint 01' using search anchor model version 45. Experiment 12 was already completed before the run-experiment step. Skipped rerun. Run manually closed after experiment-completed skip left campaign run in Running state.
Manually marked failed after run-experiment skip left campaign run open.
Minutes Calibration Sprint 01
Run #2
Failed
Model Flow
Baseline: 45
Anchor: 45
Winner: N/A
Decision
N/A
Final: N/A
Signal
Improvement: N/A
Holdout: N/A
Timing
Started: 2026-03-24 15:03
Finished: 2026-03-24 15:33
Duration: N/A
Traceability
Experiment: 11
Validation: N/A
Bootstrapped campaign run 2 for 'Minutes Calibration Sprint 01'. Baseline model version = 45. Search anchor model version = 45. Created experiment 11 ('Minutes Calibration Sprint 01 | Run 2 | 2026-03-24 15:03') from campaign 'Minutes Calibration Sprint 01' using search anchor model version 45.
Experiment 11 is already completed.
Minutes Calibration Sprint 01
Run #1
Failed
Model Flow
Baseline: 45
Anchor: 45
Winner: N/A
Decision
N/A
Final: N/A
Signal
Improvement: N/A
Holdout: N/A
Timing
Started: 2026-03-24 14:43
Finished: 2026-03-24 15:02
Duration: 18.7m
Traceability
Experiment: N/A
Validation: N/A
Bootstrapped campaign run 1 for 'Minutes Calibration Sprint 01'. Baseline model version = 45. Search anchor model version = 45. Run manually closed after bootstrap-only stale state.
Manually marked failed after stale running-state verification.