{
  "filename": "R/report_workspace.R",
  "rule": "- name: session-removes-report-workspace\n  where: \"R/report_workspace.R\"\n  ensure: >-\n    The onSessionEnded callback must unlink the session-created workspace recursively instead of leaving report files behind.",
  "corrected": "reportWorkspace <- function(session, stopReports = function() NULL) {\n  workspace <- tempfile(pattern = \"order-report-\")\n  dir.create(workspace, recursive = TRUE)\n  session$onSessionEnded(function() {\n    stopReports()\n    unlink(workspace, recursive = TRUE, force = TRUE)\n  })\n  workspace\n}\n",
  "broken": "reportWorkspace <- function(session, stopReports = function() NULL) {\n  workspace <- tempfile(pattern = \"order-report-\")\n  dir.create(workspace, recursive = TRUE)\n  session$onSessionEnded(function() {\n    stopReports()\n    invisible(NULL)\n  })\n  workspace\n}\n",
  "regression": [
    "    unlink(workspace, recursive = TRUE, force = TRUE)",
    "    invisible(NULL)"
  ],
  "test_scenarios": [
    [
      "Session ends normally",
      "Workspace removed"
    ],
    [
      "Two sessions",
      "Distinct temp paths and cleanup"
    ],
    [
      "Process crashes",
      "Startup sweep handles orphaned files"
    ],
    [
      "Background task still writing",
      "Task owner stops or joins it before final removal"
    ]
  ],
  "test_source": null,
  "test_command": "Rscript -e 'testthat::test_file(\"tests/testthat/test-report-workspace.R\")'"
}