Ad Actum
Revisión Enfocada
Volver a Ad Actum

Ad Actum War Room — Reporte Representativo

Un extracto representativo basado en el análisis de una base de código interna. Muestra la evidencia, la priorización y el alcance de remediación que puede producir un estudio.

Ad Actum War Room

Extracto Representativo

Crítico · Falla de ciclo de vida
Síntesis ejecutiva

Both resetProject() and purgeProject() bypassed the canonical teardown seam, duplicating ad-hoc cleanup that skipped job cancellation, agent process termination, workspace cleanup, event emission, and CodeStudy unlinking. Project-owned records could survive reset, and running jobs could continue against deleted change requests.

Recomendación inmediata

Consolidate project lifecycle cleanup through canonical CR teardown: route both resetProject() and purgeProject() through CrTeardownService.remove(), then run one project-scoped sweep for the remaining project-owned data.

Hallazgos
Project reset and delete bypass canonical teardown

Both lifecycle paths duplicated cleanup instead of routing through CrTeardownService.remove(), so they skipped job cancellation, process kill, workspace cleanup, event emission, and unlinking.

Critical
apps/backend/src/projects/project-lifecycle.service.ts apps/backend/src/change-requests/cr-teardown.service.ts
Reset left project-owned data behind

The UI promised an initial-state reset, but Features, Ideas, Initiatives, CodeStudies, BusinessRules, and KnowledgeDocuments survived and polluted future planning runs.

High
apps/backend/src/projects/project-lifecycle.service.ts apps/backend/src/projects/project-cleanup.service.ts apps/frontend/src/components/ProjectApp.tsx
Running jobs and agent processes survived deletion paths

Bypassing teardown allowed BullMQ jobs and long-running agent processes to continue operating against deleted change requests on two user-facing flows.

High
apps/backend/src/projects/project-lifecycle.service.ts apps/backend/src/jobs/handlers/cleanup-jobs.handler.ts
Por qué se priorizó

This approach replaces two hand-curated cleanup matrices with one canonical seam. A point fix on resetProject() alone would leave the same orphan and process-residue risk on the delete-project path.

Alcance de implementación
apps/backend/src/projects/projects.module.ts apps/backend/src/projects/project-lifecycle.service.ts apps/backend/src/projects/project.dto.ts apps/frontend/src/components/ProjectApp.tsx apps/backend/src/change-requests/cr-core.module.ts apps/backend/src/projects/project-reset.coverage.spec.ts
Trabajo de seguimiento relacionado
  1. Harden RuntimeSession/Event projectId ownership for orphan prevention
  2. Add CodeStudy {status, updatedAt} indexes for stuck-study scanning
  3. Add Spec dependency indexes for graph maintenance