fase(20): visual regression refactor

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
debian
2026-03-08 06:02:37 -04:00
parent 49e76c92b1
commit 94defee1f8
40 changed files with 1670 additions and 190 deletions

View File

@@ -65,6 +65,16 @@ import { OnFindingCreated } from './modules/integrations/application/event-handl
import { RSALicenseValidator } from './modules/licensing/infrastructure/validators/RSALicenseValidator';
import { LicenseService } from './modules/licensing/application/LicenseService';
// Visual regression module
import { KyselyVisualBaselineRepository, KyselyVisualComparisonRepository } from './modules/visual-regression/infrastructure/repositories/KyselyVisualRepository';
import { VisualRegressionAdapter } from './modules/visual-regression/infrastructure/adapters/VisualRegressionAdapter';
import { ApproveBaselineCommand } from './modules/visual-regression/application/commands/ApproveBaselineCommand';
import { RejectComparisonCommand } from './modules/visual-regression/application/commands/RejectComparisonCommand';
import { ApproveAllNewStatesCommand } from './modules/visual-regression/application/commands/ApproveAllNewStatesCommand';
import { ListComparisonsQuery } from './modules/visual-regression/application/queries/ListComparisonsQuery';
import { LocalStorageProvider } from './shared/infrastructure/StorageProvider';
import path from 'path';
// Scheduling module
import { KyselyScheduleRepository } from './modules/scheduling/infrastructure/repositories/KyselyScheduleRepository';
import { CreateScheduleCommand } from './modules/scheduling/application/commands/CreateScheduleCommand';
@@ -171,6 +181,23 @@ async function bootstrap(): Promise<void> {
jobQueue.registerHandler(REPORT_JOB_TYPE, createReportJobHandler({ logger, reportRepository: reportRepo, findingRepository: findingRepo }));
jobQueue.start();
// 11d. Visual regression module
const storageBasePath = path.join(process.cwd(), 'data');
const storageProvider = new LocalStorageProvider(storageBasePath);
const visualBaselineRepo = new KyselyVisualBaselineRepository(db);
const visualComparisonRepo = new KyselyVisualComparisonRepository(db);
const visualRegressionAdapter = new VisualRegressionAdapter(
storageProvider,
visualBaselineRepo,
visualComparisonRepo,
eventBus
);
void visualRegressionAdapter; // used by ExplorationOrchestrator in crawling infra
const listComparisons = new ListComparisonsQuery(visualComparisonRepo);
const approveBaseline = new ApproveBaselineCommand(visualComparisonRepo, visualBaselineRepo, eventBus);
const rejectComparison = new RejectComparisonCommand(visualComparisonRepo);
const approveAllNewStates = new ApproveAllNewStatesCommand(visualComparisonRepo, visualBaselineRepo, eventBus);
// 12b. Scheduling module (after job queue, since it enqueues jobs)
const scheduleRepo = new KyselyScheduleRepository(db);
const createSchedule = new CreateScheduleCommand(scheduleRepo, eventBus);
@@ -191,6 +218,7 @@ async function bootstrap(): Promise<void> {
reportingDeps: { generateReport, reportRepository: reportRepo, jobQueue },
integrationsDeps: { integrationRepo, webhookRepo },
schedulingDeps: { createSchedule, toggleSchedule, deleteSchedule, listSchedules, schedulingService, scheduleRepo },
visualRegressionDeps: { listComparisons, approveBaseline, rejectComparison, approveAllNewStates },
licenseService,
authDeps: {
registerCommand,