anchor.diff:  
     TWorkflowStateHolder = class sealed
       private
  +      { Primary logical entities }
  +
         FConfigData : TConfigData;
         FFixInsightXMLParser : TFixInsightXMLParser;
         FProjectGroupParser : TProjectGroupParser;
         FProjectParser : TProjectParser;
         FReportBuilder : IReportBuilder;
  -      FReportOutput : TStreamWriter;
         FTaskManager : TTaskManager;
  +
  +      { Supporting infrastructure }
   
         FMessages : TDictionary<TFileName, TArray<TFixInsightMessage>>;
         FProjects : TArray<TFileName>;
  +      FReportFileName : TFileName;
  +      FReportOutput : TStreamWriter;
         FReports : TArray<TPair<TFileName, TFileName>>;
         FStartTime : TDateTime;
         FTotalDuration : TTimeSpan;
         FTotalMessages : Integer;
  -
  +    private
         procedure InitReportBuilder;
       public
         constructor Create(ConfigData : TConfigData);
  
positive.code: 
  destructor TWorkflowStateHolder.Destroy;
  begin
    FreeAndNil(FMessages);
  
    FreeAndNil(FFixInsightXMLParser);
    FreeAndNil(FProjectGroupParser);
    FreeAndNil(FProjectParser);
    FreeAndNil(FReportOutput);
    FreeAndNil(FTaskManager);
    FReportBuilder := nil;
  
    inherited Destroy;
  end;
  
negative.code:     .AddTransition(asReportBuilt, asArchiveMade, acMakeArchive,
        procedure (const PreviousState, CurrentState : TApplicationState; const UsedCommand : TApplicationCommand)
        var
          sArchiveFileName : TFileName;
          ZF : TZipFile;
        begin
          with StateHolder do
            if FConfigData.MakeArchive then
            begin
              sArchiveFileName := FReportFileName + STR_ARCHIVE_FILE_EXT;
  
              if TFile.Exists(sArchiveFileName) then
                TFile.Delete(sArchiveFileName);
  
              ZF := TZipFile.Create;
              try
                ZF.Open(sArchiveFileName, zmWrite);
                ZF.Add(FReportFileName);
                ZF.Close;
              finally
                ZF.Free;
              end;
  
              DeleteFile(FReportFileName);
            end;
        end
      )
  