anchor.diff:  
   class function TExecutiveTransitionsProvider.CalcTotalSummary(StateHolder : TWorkflowStateHolder) : TArray<TSummaryItem>;
   begin
  -  // TODO: implement {TExecutiveTransitionsProvider.CalcTotalSummary}
  +  Result := CalcSummary(StateHolder, String.Empty);
   end;
   
   class function TExecutiveTransitionsProvider.MakeRecord(Msg : TFixInsightMessage) : TReportRecord;
   begin
  -  // TODO: implement {TExecutiveTransitionsProvider.MakeRecord}
  +  Result.Column             := Msg.Column;
  +  Result.FileName           := Msg.FileName;
  +  Result.Line               := Msg.Line;
  +  Result.MessageText        := Msg.Text;
  +  Result.MessageTypeKeyword := ARR_MSGTYPE_TO_MSGKEYWORD_MAPPING[Msg.MsgType];
  +  Result.MessageTypeName    := ARR_MSGTYPE_TO_MSGNAME_MAPPING[Msg.MsgType];
   end;
   
   class procedure TExecutiveTransitionsProvider.PrepareWorkflow(const StateMachine : IStateMachine;
  
positive.code:         IStateMachine = IFiniteStateMachine<TApplicationState, TApplicationCommand, EStateMachineError>;
      private
        class function  CalcProjectSummary(StateHolder : TWorkflowStateHolder; Project : TFileName) : TArray<TSummaryItem>;
        class function  CalcTotalSummary(StateHolder : TWorkflowStateHolder) : TArray<TSummaryItem>;
        class function  MakeRecord(Msg : TFixInsightMessage) : TReportRecord;
      public
  
negative.code:       MessageTypeName    := ARR_MSGTYPE_TO_MSGNAME_MAPPING[MT];
      end;
  
    if ProjectFilter.IsEmpty then
      for F in StateHolder.FProjects do
        for Msg in StateHolder.FMessages[F] do
          Inc(arrSummary[Msg.MsgType].MessageCount)
    else
      for Msg in StateHolder.FMessages[ProjectFilter] do
        Inc(arrSummary[Msg.MsgType].MessageCount);
  
    for MT := Low(arrSummary) to High(arrSummary) do
      if arrSummary[MT].MessageCount > 0 then
  