anchor.diff:                   ?execStartToCloseTimeout = execStartToCloseTimeout,
                    ?childPolicy             = childPolicy,
                    ?identity                = identity)         
  +                 
  +    member this.Start swfClt = 
  +        register swfClt |> ignore
  +        startDecisionWorker  swfClt
  +        startActivityWorkers swfClt
  +        startChildWorkflows  swfClt        
   
       // #region Public Events
   
  
positive.code:     let decider (task : DecisionTask) = decide task.Events
  
      let startDecisionWorker clt  = DecisionWorker.Start(clt, domain, taskList.Name, decider, onDecisionTaskError.Trigger, ?identity = identity)
      let startActivityWorkers (clt : Amazon.SimpleWorkflow.AmazonSimpleWorkflowClient) = 
          stages 
          |> List.choose (function | { Action = ScheduleActivity(activity) } -> Some activity | _ -> None)
          |> List.iter (fun activity -> 
              // leave some buffer for heart beat frequency, record a heartbeat every 75% of the timeout
              let heartbeat = TimeSpan.FromSeconds(float activity.TaskHeartbeatTimeout * 0.75)
              ActivityWorker.Start(clt, domain, activity.TaskList.Name, activity.Process, onActivityTaskError.Trigger, heartbeat, ?identity = identity))
  
      member private this.Append (toAction : 'a -> StageAction, item : 'a) = 
          let id = stages.Length
  
negative.code:     let findEventTypeById eventId (evts : HistoryEvent seq) =
          evts |> Seq.pick (function | { EventId = eventId'; EventType = eventType } when eventId = eventId' -> Some eventType | _ -> None)
  
      let getStageActionId actionName { StageNumber = stage; AttemptNumber = n } = 
          sprintf "%d.%s.attempt_%d.%s" stage actionName n (Guid.NewGuid().ToString().Substring(0, 8))
      let getActivityVersion stageNum = sprintf "%s.%d" name stageNum
  
      // sort the stages by Id
      let stages = defaultArg stages [] |> List.sortBy (fun { StageNumber = n } -> n)
  
      // all the activities (including those part of a schedule multiple action)
      let activities = stages |> List.collect (function 
              | { Action = ScheduleActivity(activity) } -> [ activity ]
              | _ -> [])
  
      // all the child workflows (including those part of a schedule multiple action)
      let childWorkflows = stages |> List.collect (function 
              | { Action = StartChildWorkflow(workflow) } -> [ workflow ]
              | _ -> [])
      
      /// tries to get the nth (zero-index) stage
      let getStage n = if n >= stages.Length then None else List.nth stages n |> Some
  