{
  "_id": "6a1f0ee1b401979e7341d42b",
  "Package": "brightspaceR",
  "Title": "Access D2L 'Brightspace' Data Sets via the 'BDS' API",
  "Version": "0.1.0",
  "Authors@R": "person(\"Peeyoosh\", \"Chandra\", role = c(\"aut\", \"cre\"),\nemail = \"pc@strategyandops.co\")",
  "Description": "Connect to the D2L 'Brightspace' Data Sets ('BDS') API via\n'OAuth2', download all available datasets as tidy data frames\nwith proper types, join them using convenience functions that\nknow the foreign key relationships, and analyse student\nengagement, performance, and retention with ready-made\nanalytics functions.",
  "License": "MIT + file LICENSE",
  "URL": "https://pcstrategyandopsco.github.io/brightspaceR/,\nhttps://github.com/pcstrategyandopsco/brightspaceR",
  "BugReports": "https://github.com/pcstrategyandopsco/brightspaceR/issues",
  "Encoding": "UTF-8",
  "Roxygen": "list(markdown = TRUE)",
  "RoxygenNote": "7.3.3",
  "Config/testthat/edition": "3",
  "VignetteBuilder": "knitr",
  "Config/pak/sysreqs": "libicu-dev libssl-dev libx11-dev",
  "Repository": "https://pcstrategyandopsco.r-universe.dev",
  "Date/Publication": "2026-03-18 08:58:47 UTC",
  "RemoteUrl": "https://github.com/pcstrategyandopsco/brightspacer",
  "RemoteRef": "HEAD",
  "RemoteSha": "76ccde0c0e4b8a7800ad82406150b84034aba5bc",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-05-17 08:46:34 UTC",
    "User": "root"
  },
  "Author": "Peeyoosh Chandra [aut, cre]",
  "Maintainer": "Peeyoosh Chandra <pc@strategyandops.co>",
  "MD5sum": "d696f66deb0d9410bb1bd8a75528bfc5",
  "_user": "pcstrategyandopsco",
  "_type": "src",
  "_file": "brightspaceR_0.1.0.tar.gz",
  "_fileid": "077361b6673b14f6df63abf4c9138f5fd1595557b55b781346134a56c480bd63",
  "_filesize": 375787,
  "_sha256": "077361b6673b14f6df63abf4c9138f5fd1595557b55b781346134a56c480bd63",
  "_created": "2026-05-17T08:46:34.000Z",
  "_published": "2026-06-02T17:12:01.703Z",
  "_distro": "noble",
  "_jobs": [
    {
      "job": 79128860160,
      "time": 120,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7040949698"
    },
    {
      "job": 79128860497,
      "time": 134,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7040951362"
    },
    {
      "job": 79128860633,
      "time": 98,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7040947146"
    },
    {
      "job": 79128860597,
      "time": 98,
      "config": "macos-release-arm64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7040947133"
    },
    {
      "job": 79128859720,
      "time": 178,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7040935329"
    },
    {
      "job": 79128859650,
      "time": 115,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7364739973"
    },
    {
      "job": 79128860144,
      "time": 121,
      "config": "windows-devel",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7040949743"
    },
    {
      "job": 79128860576,
      "time": 95,
      "config": "windows-oldrel",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7040946914"
    },
    {
      "job": 79128860415,
      "time": 121,
      "config": "windows-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7040950003"
    }
  ],
  "_buildurl": "https://github.com/r-universe/pcstrategyandopsco/actions/runs/25986181205",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_upstream": "https://github.com/pcstrategyandopsco/brightspacer",
  "_commit": {
    "id": "76ccde0c0e4b8a7800ad82406150b84034aba5bc",
    "author": "pcstrategyandopsco <peeyooshc@gmail.com>",
    "committer": "pcstrategyandopsco <peeyooshc@gmail.com>",
    "message": "Rebuild pkgdown site with privacy vignette and exported privacy functions\n",
    "time": 1773824327
  },
  "_maintainer": {
    "name": "Peeyoosh Chandra",
    "email": "pc@strategyandops.co",
    "login": "pcstrategyandopsco",
    "twitter": "@peeyooshchandra",
    "description": "",
    "uuid": 120511573
  },
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1.0",
      "role": "Depends"
    },
    {
      "package": "cli",
      "role": "Imports"
    },
    {
      "package": "config",
      "role": "Imports"
    },
    {
      "package": "curl",
      "role": "Imports"
    },
    {
      "package": "dplyr",
      "role": "Imports"
    },
    {
      "package": "httr2",
      "role": "Imports"
    },
    {
      "package": "lubridate",
      "role": "Imports"
    },
    {
      "package": "openssl",
      "role": "Imports"
    },
    {
      "package": "purrr",
      "role": "Imports"
    },
    {
      "package": "readr",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "role": "Imports"
    },
    {
      "package": "stringr",
      "role": "Imports"
    },
    {
      "package": "tibble",
      "role": "Imports"
    },
    {
      "package": "tools",
      "role": "Imports"
    },
    {
      "package": "utils",
      "role": "Imports"
    },
    {
      "package": "httptest2",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "pkgdown",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "rstudioapi",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    },
    {
      "package": "yaml",
      "role": "Suggests"
    }
  ],
  "_owner": "pcstrategyandopsco",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2026-10",
      "n": 4
    },
    {
      "week": "2026-11",
      "n": 10
    },
    {
      "week": "2026-12",
      "n": 5
    }
  ],
  "_tags": [],
  "_stars": 2,
  "_contributors": [
    {
      "user": "peeyooshc",
      "count": 19,
      "uuid": 732008
    }
  ],
  "_userbio": {
    "uuid": 120511573,
    "type": "user",
    "name": "Peeyoosh Chandra"
  },
  "_downloads": {
    "count": 502,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/brightspaceR"
  },
  "_devurl": "https://github.com/pcstrategyandopsco/brightspacer",
  "_pkgdown": "https://pcstrategyandopsco.github.io/brightspaceR/",
  "_searchresults": 0,
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/brightspaceR.html",
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "manual.pdf"
  ],
  "_homeurl": "https://github.com/pcstrategyandopsco/brightspacer",
  "_realowner": "pcstrategyandopsco",
  "_cranurl": true,
  "_releases": [
    {
      "version": "0.1.0",
      "date": "2026-03-12"
    }
  ],
  "_exports": [
    "bs_ads_filter",
    "bs_ads_job_status",
    "bs_api_version",
    "bs_apply_diffs",
    "bs_apply_field_policy",
    "bs_assessment_performance",
    "bs_assignment_completion",
    "bs_auth",
    "bs_auth_refresh",
    "bs_auth_token",
    "bs_check_scopes",
    "bs_clean_names",
    "bs_config",
    "bs_config_set",
    "bs_course_engagement",
    "bs_course_summary",
    "bs_create_ads_job",
    "bs_deauth",
    "bs_diff_manifest",
    "bs_download_ads",
    "bs_download_all",
    "bs_download_dataset",
    "bs_engagement_score",
    "bs_engagement_summary",
    "bs_enrich_enrollments",
    "bs_filter_test_users",
    "bs_get_ads",
    "bs_get_ads_schema",
    "bs_get_dataset",
    "bs_get_dataset_current",
    "bs_get_schema",
    "bs_get_timezone",
    "bs_grade_summary",
    "bs_has_token",
    "bs_identify_at_risk",
    "bs_join",
    "bs_join_content_progress",
    "bs_join_enrollments_grades",
    "bs_join_enrollments_orgunits",
    "bs_join_enrollments_roles",
    "bs_join_grades_objects",
    "bs_join_users_enrollments",
    "bs_list_ads",
    "bs_list_ads_jobs",
    "bs_list_ads_schemas",
    "bs_list_datasets",
    "bs_list_extracts",
    "bs_list_schemas",
    "bs_org_id",
    "bs_pseudonymise_df",
    "bs_pseudonymise_id",
    "bs_retention_summary",
    "bs_set_timezone",
    "bs_summarize_enrollments"
  ],
  "_help": [
    {
      "page": "bs_ads_filter",
      "title": "Build an ADS export filter",
      "topics": [
        "bs_ads_filter"
      ]
    },
    {
      "page": "bs_ads_job_status",
      "title": "Check ADS export job status",
      "topics": [
        "bs_ads_job_status"
      ]
    },
    {
      "page": "bs_api_version",
      "title": "Get or set the Brightspace API version",
      "topics": [
        "bs_api_version"
      ]
    },
    {
      "page": "bs_apply_field_policy",
      "title": "Apply a PII field policy to a data frame",
      "topics": [
        "bs_apply_field_policy"
      ]
    },
    {
      "page": "bs_assessment_performance",
      "title": "Summarize assessment performance per user per quiz",
      "topics": [
        "bs_assessment_performance"
      ]
    },
    {
      "page": "bs_assignment_completion",
      "title": "Summarize assignment submission completion",
      "topics": [
        "bs_assignment_completion"
      ]
    },
    {
      "page": "bs_auth",
      "title": "Authenticate with Brightspace",
      "topics": [
        "bs_auth"
      ]
    },
    {
      "page": "bs_auth_refresh",
      "title": "Authenticate with a refresh token",
      "topics": [
        "bs_auth_refresh"
      ]
    },
    {
      "page": "bs_auth_token",
      "title": "Set Brightspace authentication token directly",
      "topics": [
        "bs_auth_token"
      ]
    },
    {
      "page": "bs_check_scopes",
      "title": "Test Brightspace API scope access",
      "topics": [
        "bs_check_scopes"
      ]
    },
    {
      "page": "bs_clean_names",
      "title": "Convert column names from PascalCase to snake_case",
      "topics": [
        "bs_clean_names"
      ]
    },
    {
      "page": "bs_config",
      "title": "Read Brightspace credentials from a config file",
      "topics": [
        "bs_config"
      ]
    },
    {
      "page": "bs_config_set",
      "title": "Create or update a Brightspace config file",
      "topics": [
        "bs_config_set"
      ]
    },
    {
      "page": "bs_course_engagement",
      "title": "Calculate per-user per-course engagement metrics",
      "topics": [
        "bs_course_engagement"
      ]
    },
    {
      "page": "bs_course_summary",
      "title": "Summarize course effectiveness",
      "topics": [
        "bs_course_summary"
      ]
    },
    {
      "page": "bs_create_ads_job",
      "title": "Create an ADS export job",
      "topics": [
        "bs_create_ads_job"
      ]
    },
    {
      "page": "bs_deauth",
      "title": "Clear Brightspace authentication",
      "topics": [
        "bs_deauth"
      ]
    },
    {
      "page": "bs_diff_manifest",
      "title": "Inspect the extract manifest from a merged BDS dataset",
      "topics": [
        "bs_diff_manifest"
      ]
    },
    {
      "page": "bs_download_ads",
      "title": "Download a completed ADS export",
      "topics": [
        "bs_download_ads"
      ]
    },
    {
      "page": "bs_download_all",
      "title": "Download all available datasets",
      "topics": [
        "bs_download_all"
      ]
    },
    {
      "page": "bs_download_dataset",
      "title": "Download a dataset extract",
      "topics": [
        "bs_download_dataset"
      ]
    },
    {
      "page": "bs_engagement_score",
      "title": "Add a composite engagement score",
      "topics": [
        "bs_engagement_score"
      ]
    },
    {
      "page": "bs_engagement_summary",
      "title": "Summarize engagement by grouping dimension",
      "topics": [
        "bs_engagement_summary"
      ]
    },
    {
      "page": "bs_enrich_enrollments",
      "title": "Enrich enrollments with org unit and user details",
      "topics": [
        "bs_enrich_enrollments"
      ]
    },
    {
      "page": "bs_filter_test_users",
      "title": "Filter test users from a dataset",
      "topics": [
        "bs_filter_test_users"
      ]
    },
    {
      "page": "bs_get_ads",
      "title": "Get an ADS dataset by name (convenience wrapper)",
      "topics": [
        "bs_get_ads"
      ]
    },
    {
      "page": "bs_get_ads_schema",
      "title": "Get the schema for an ADS dataset",
      "topics": [
        "bs_get_ads_schema"
      ]
    },
    {
      "page": "bs_get_dataset",
      "title": "Get a dataset by name",
      "topics": [
        "bs_get_dataset"
      ]
    },
    {
      "page": "bs_get_dataset_current",
      "title": "Get current dataset by merging full and differential extracts",
      "topics": [
        "bs_get_dataset_current"
      ]
    },
    {
      "page": "bs_get_schema",
      "title": "Get the schema for a dataset",
      "topics": [
        "bs_get_schema"
      ]
    },
    {
      "page": "bs_get_timezone",
      "title": "Get the current Brightspace analytics timezone",
      "topics": [
        "bs_get_timezone"
      ]
    },
    {
      "page": "bs_grade_summary",
      "title": "Summarize grades with percentages",
      "topics": [
        "bs_grade_summary"
      ]
    },
    {
      "page": "bs_has_token",
      "title": "Check if authenticated with Brightspace",
      "topics": [
        "bs_has_token"
      ]
    },
    {
      "page": "bs_identify_at_risk",
      "title": "Identify at-risk students",
      "topics": [
        "bs_identify_at_risk"
      ]
    },
    {
      "page": "bs_join",
      "title": "Smart join two BDS tibbles",
      "topics": [
        "bs_join"
      ]
    },
    {
      "page": "bs_join_content_progress",
      "title": "Join content objects with user progress",
      "topics": [
        "bs_join_content_progress"
      ]
    },
    {
      "page": "bs_join_enrollments_grades",
      "title": "Join enrollments with grade results",
      "topics": [
        "bs_join_enrollments_grades"
      ]
    },
    {
      "page": "bs_join_enrollments_orgunits",
      "title": "Join enrollments with org units",
      "topics": [
        "bs_join_enrollments_orgunits"
      ]
    },
    {
      "page": "bs_join_enrollments_roles",
      "title": "Join enrollments with role details",
      "topics": [
        "bs_join_enrollments_roles"
      ]
    },
    {
      "page": "bs_join_grades_objects",
      "title": "Join grade results with grade objects",
      "topics": [
        "bs_join_grades_objects"
      ]
    },
    {
      "page": "bs_join_users_enrollments",
      "title": "Join users with enrollments",
      "topics": [
        "bs_join_users_enrollments"
      ]
    },
    {
      "page": "bs_list_ads",
      "title": "List available Advanced Data Sets",
      "topics": [
        "bs_list_ads"
      ]
    },
    {
      "page": "bs_list_ads_jobs",
      "title": "List all submitted ADS export jobs",
      "topics": [
        "bs_list_ads_jobs"
      ]
    },
    {
      "page": "bs_list_ads_schemas",
      "title": "List all registered ADS dataset schemas",
      "topics": [
        "bs_list_ads_schemas"
      ]
    },
    {
      "page": "bs_list_datasets",
      "title": "List available Brightspace Data Sets",
      "topics": [
        "bs_list_datasets"
      ]
    },
    {
      "page": "bs_list_extracts",
      "title": "List available extracts for a dataset",
      "topics": [
        "bs_list_extracts"
      ]
    },
    {
      "page": "bs_list_schemas",
      "title": "List all registered dataset schemas",
      "topics": [
        "bs_list_schemas"
      ]
    },
    {
      "page": "bs_org_id",
      "title": "Get the root organisation ID",
      "topics": [
        "bs_org_id"
      ]
    },
    {
      "page": "bs_pseudonymise_df",
      "title": "Pseudonymise person-referencing ID columns in a data frame",
      "topics": [
        "bs_pseudonymise_df"
      ]
    },
    {
      "page": "bs_pseudonymise_id",
      "title": "Pseudonymise a vector of IDs",
      "topics": [
        "bs_pseudonymise_id"
      ]
    },
    {
      "page": "bs_retention_summary",
      "title": "Summarize retention and dropout rates",
      "topics": [
        "bs_retention_summary"
      ]
    },
    {
      "page": "bs_set_timezone",
      "title": "Set the timezone for Brightspace analytics",
      "topics": [
        "bs_set_timezone"
      ]
    },
    {
      "page": "bs_summarize_enrollments",
      "title": "Summarize enrollments to one row per user per course",
      "topics": [
        "bs_summarize_enrollments"
      ]
    }
  ],
  "_pkglogo": "https://github.com/pcstrategyandopsco/brightspacer/raw/HEAD/man/figures/logo.svg",
  "_readme": "https://github.com/pcstrategyandopsco/brightspacer/raw/HEAD/README.md",
  "_rundeps": [
    "askpass",
    "bit",
    "bit64",
    "cli",
    "clipr",
    "config",
    "cpp11",
    "crayon",
    "curl",
    "dplyr",
    "generics",
    "glue",
    "hms",
    "httr2",
    "lifecycle",
    "lubridate",
    "magrittr",
    "openssl",
    "pillar",
    "pkgconfig",
    "prettyunits",
    "progress",
    "purrr",
    "R6",
    "rappdirs",
    "readr",
    "rlang",
    "stringi",
    "stringr",
    "sys",
    "tibble",
    "tidyselect",
    "timechange",
    "tzdb",
    "utf8",
    "vctrs",
    "vroom",
    "withr",
    "yaml"
  ],
  "_vignettes": [
    {
      "source": "interactive-dashboard.Rmd",
      "filename": "interactive-dashboard.html",
      "title": "Building an Interactive Dashboard",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Strategy",
        "Step 1: Create the Rmd template",
        "Step 2: Data preparation chunk",
        "Step 3: HTML layout with inline R",
        "Step 4: Chart.js with inline R data",
        "Step 5: CSS styling",
        "Rendering",
        "Parameterised reports",
        "Using with the MCP server",
        "Why Chart.js instead of plotly?"
      ],
      "created": "2026-03-06 08:12:36",
      "modified": "2026-03-06 08:12:36",
      "commits": 1
    },
    {
      "source": "convenience-functions.Rmd",
      "filename": "convenience-functions.html",
      "title": "Convenience Functions: Joins, Schemas, and Data Wrangling",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Fetching datasets",
        "Single dataset by name",
        "Discovery",
        "Bulk download",
        "Joining datasets",
        "Smart join: bs_join()",
        "Named join functions",
        "Chaining joins",
        "Schemas and column types",
        "Why schemas matter",
        "Registered schemas",
        "Inspecting a schema",
        "Unknown datasets",
        "Column name conversion",
        "Common patterns",
        "Enrollment counts by role",
        "Grade summary for a course",
        "Active users in the last 90 days",
        "Content completion rates"
      ],
      "created": "2026-03-06 08:12:36",
      "modified": "2026-03-06 08:12:36",
      "commits": 1
    },
    {
      "source": "getting-started.Rmd",
      "filename": "getting-started.html",
      "title": "Getting Started with brightspaceR",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Prerequisites",
        "Discovering Datasets",
        "Downloading Datasets",
        "Joining Datasets",
        "Column Types and Schemas",
        "Advanced Data Sets (ADS)",
        "Configuration",
        "Cleaning Up"
      ],
      "created": "2026-03-06 08:12:36",
      "modified": "2026-03-08 21:36:32",
      "commits": 2
    },
    {
      "source": "mcp-setup.Rmd",
      "filename": "mcp-setup.html",
      "title": "MCP Server Setup",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Prerequisites",
        "Locating the server script",
        "Claude Desktop setup",
        "Step 1: Find your config file",
        "Step 2: Add the brightspaceR server",
        "Step 3: Restart Claude Desktop",
        "Step 4: Verify the connection",
        "Claude Code (CLI) setup",
        "Option A: Global configuration (~/.claude.json)",
        "Option B: Project-level configuration (.mcp.json)",
        "Verify in Claude Code",
        "Environment variables",
        "Available tools",
        "Example conversation",
        "Security",
        "Troubleshooting",
        "Server not starting",
        "Authentication failures",
        "No tools appearing in Claude Desktop",
        "Visualisations not appearing"
      ],
      "created": "2026-03-08 21:36:32",
      "modified": "2026-03-18 08:08:22",
      "commits": 4
    },
    {
      "source": "mcp-test-script.Rmd",
      "filename": "mcp-test-script.html",
      "title": "MCP Server Test Script",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Test 1: Auth check",
        "Test 2: Dataset discovery",
        "Test 3: Keyword search",
        "Test 4: Dataset description with column stats",
        "Test 5: Simple execute_r -- scalar result",
        "Test 6: execute_r -- data frame result",
        "Test 7: execute_r -- persistent workspace",
        "Test 8: Interactive Chart.js chart",
        "Test 8b: Static ggplot fallback",
        "Test 9: get_data_summary -- basic",
        "Test 10: get_data_summary -- with filter",
        "Test 11: get_data_summary -- with group_by",
        "Test 12: execute_r -- join and analyze",
        "Test 13: execute_r -- error handling",
        "Test 14: Multi-step analysis (integration test)",
        "Test 15: Removed tools are gone",
        "Test 16: list_schemas",
        "Test 17: AST code inspection -- blocked code",
        "Test 18: AST code inspection -- blocked package access",
        "Test 19: AST code inspection -- safe code passes",
        "Test 20: PII field policy -- Users dataset",
        "Test 21: PII field policy -- Grade Results",
        "Test 22: Audit log exists",
        "Test 23: ID pseudonymisation — UserId is hashed",
        "Troubleshooting"
      ],
      "created": "2026-03-06 08:12:36",
      "modified": "2026-03-18 08:08:22",
      "commits": 3
    },
    {
      "source": "mcp-server-design.Rmd",
      "filename": "mcp-server-design.html",
      "title": "MCP Server: Design and Implementation",
      "engine": "knitr::rmarkdown",
      "headings": [
        "The Problem",
        "Design Principles",
        "Compute where compute belongs",
        "Visualization: interactive HTML first, static PNG fallback",
        "Outcome-oriented tools",
        "Progressive disclosure",
        "Server instructions",
        "Architecture",
        "Persistent workspace",
        "Output directory",
        "Smart result formatting",
        "Column summary helper",
        "Response helpers",
        "Size guard",
        "Defensive execution",
        "Tool Reference",
        "Discovery tools",
        "Analysis tools",
        "Types of Analysis",
        "Enrollment analytics",
        "Grade performance",
        "Student engagement",
        "Course health",
        "Cross-dataset joins",
        "Reporting and dashboards",
        "Typical Conversation Flow",
        "PII Field Policy",
        "Policy file",
        "Default policy",
        "Custom policy",
        "Where filtering happens",
        "ID Pseudonymisation",
        "How it works",
        "Which columns are hashed",
        "Where it runs",
        "Combined effect with field policy",
        "Audit Logging",
        "Security Considerations"
      ],
      "created": "2026-03-06 08:12:36",
      "modified": "2026-03-18 08:51:36",
      "commits": 4
    },
    {
      "source": "setup.Rmd",
      "filename": "setup.html",
      "title": "OAuth2 Setup for Brightspace Data Sets",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Step 1: Register an OAuth2 Application",
        "About the Redirect URI",
        "About Scopes",
        "Tier 1: BDS only (minimum)",
        "Tier 2: BDS + ADS (recommended)",
        "Verifying scopes",
        "Scope reference",
        "Step 2: Configure Your R Environment",
        "Option A: Config file (recommended)",
        "Option B: Environment variables",
        "Credential resolution order",
        "Step 3: Authenticate",
        "Token Caching and Refresh",
        "Non-interactive Environments (Scheduled Scripts)",
        "Step 4: Verify It Works",
        "Troubleshooting",
        "\"No client ID found\"",
        "Browser doesn't open",
        "\"No authorization code found in the redirect URL\"",
        "403 Forbidden errors",
        "Token expired and won't refresh",
        "References"
      ],
      "created": "2026-03-06 08:12:36",
      "modified": "2026-03-10 08:12:52",
      "commits": 3
    },
    {
      "source": "privacy-compliance.Rmd",
      "filename": "privacy-compliance.html",
      "title": "Privacy Compliance and De-identification Standards",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Standards Reference",
        "ENISA — Pseudonymisation Techniques and Best Practices",
        "NIST SP 800-188 — De-Identifying Government Datasets",
        "NIST IR 8053 — De-Identification of Personal Information",
        "ISO 25237:2017 — Health Informatics: Pseudonymization",
        "GDPR Article 4(5) + EDPB Guidelines 01/2025 on Pseudonymisation",
        "FERPA — De-Identification of Education Records",
        "HIPAA Safe Harbor and Expert Determination",
        "Compliance Summary",
        "What the MCP Server Does Automatically",
        "Applying Privacy Protections in R Scripts",
        "Step 1: Suppress direct identifiers",
        "Step 2: Pseudonymise person-referencing IDs",
        "Step 3: Apply minimum cell sizes (for FERPA compliance)",
        "Step 4: Generalise dates (optional, for stronger de-identification)",
        "Step 5: Audit trail",
        "Complete Example: FERPA-Aligned Analysis Script",
        "Key Principles",
        "Further Reading"
      ],
      "created": "2026-03-18 08:08:22",
      "modified": "2026-03-18 08:38:02",
      "commits": 2
    },
    {
      "source": "shiny-app.Rmd",
      "filename": "shiny-app.html",
      "title": "Shiny App Example: LMS Explorer",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Prerequisites",
        "The complete app",
        "Running the app",
        "How it works",
        "Data loading",
        "Filtering",
        "Chart rendering",
        "Extending the app",
        "Adding authentication",
        "Adding a download button",
        "Scheduled data refresh",
        "Deploying to Posit Connect / shinyapps.io"
      ],
      "created": "2026-03-06 08:12:36",
      "modified": "2026-03-06 08:12:36",
      "commits": 1
    }
  ],
  "_score": 5.431363764158988,
  "_indexed": true,
  "_nocasepkg": "brightspacer",
  "_universes": [
    "pcstrategyandopsco"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.1.0",
      "date": "2026-05-17T08:48:32.000Z",
      "distro": "noble",
      "commit": "76ccde0c0e4b8a7800ad82406150b84034aba5bc",
      "fileid": "85fb1df647e8abb2a5590fb64b28452d1be61a04a72df0150b7924dc4f8d1e1c",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/pcstrategyandopsco/actions/runs/25986181205"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.1.0",
      "date": "2026-05-17T08:48:47.000Z",
      "distro": "noble",
      "commit": "76ccde0c0e4b8a7800ad82406150b84034aba5bc",
      "fileid": "ada2a0ca8fe3a109f7bab42865c31aead78b8996822ba22a57b9471d238ad01a",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/pcstrategyandopsco/actions/runs/25986181205"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.1.0",
      "date": "2026-05-17T08:48:14.000Z",
      "commit": "76ccde0c0e4b8a7800ad82406150b84034aba5bc",
      "fileid": "8c4692c2244376df53f78ce97e6b38b54cd551356df50dd252d4d339c3e75de5",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/pcstrategyandopsco/actions/runs/25986181205"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "0.1.0",
      "date": "2026-05-17T08:48:13.000Z",
      "commit": "76ccde0c0e4b8a7800ad82406150b84034aba5bc",
      "fileid": "bddb03ee3b5ff1543e07b22559947d62e2084fb810669f10c6508e687e2c4374",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/pcstrategyandopsco/actions/runs/25986181205"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.1.0",
      "date": "2026-05-17T08:48:26.000Z",
      "commit": "76ccde0c0e4b8a7800ad82406150b84034aba5bc",
      "fileid": "b2365be7e9a00920db7879654a7ec32d94c624dca53d902dd236315587f5b7e0",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/pcstrategyandopsco/actions/runs/25986181205"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.1.0",
      "date": "2026-05-17T08:47:57.000Z",
      "commit": "76ccde0c0e4b8a7800ad82406150b84034aba5bc",
      "fileid": "340586fe87eca00028136d3452b7b45a675c060fcc17a0488f66a3b4b7bdb987",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/pcstrategyandopsco/actions/runs/25986181205"
    },
    {
      "r": "4.6.0",
      "os": "win",
      "version": "0.1.0",
      "date": "2026-05-17T08:48:25.000Z",
      "commit": "76ccde0c0e4b8a7800ad82406150b84034aba5bc",
      "fileid": "bc21e3558587afecbffbf9593dbd47953014f1e6d76293175de0b05b74fbc8bb",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/pcstrategyandopsco/actions/runs/25986181205"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.1.0",
      "date": "2026-06-02T17:11:38.000Z",
      "commit": "76ccde0c0e4b8a7800ad82406150b84034aba5bc",
      "fileid": "0e503dba016482cc17d9e6371c330aa68a0a50c1bebebb6c4822bd687b8e255a",
      "status": "success",
      "buildurl": "https://github.com/r-universe/pcstrategyandopsco/actions/runs/25986181205"
    }
  ]
}