{
  "_id": "6a213e62cd65a98ecbd29a7b",
  "Package": "Proc4",
  "Version": "0.8-5",
  "Date": "2024/05/26",
  "Title": "Four Process Assessment Database and Dispatcher",
  "Authors@R": "person(given = \"Russell\",\nfamily = \"Almond\",\nrole = c(\"aut\", \"cre\"),\nemail = \"ralmond@fsu.edu\",\ncomment = c(ORCID = \"0000-0002-8876-9337\"))",
  "Author": "Russell Almond",
  "Maintainer": "Russell Almond <ralmond@fsu.edu>",
  "Description": "Utilities for working with messages in the four four\nprocess architecture as json objects.",
  "Collate": "ErrorHandling.R Message.R MessageQueue.R Listeners.R\nCaptureListener.R InjectionListener.R TableListener.R\nUpdateListener.R UpsertListener.R",
  "License": "Artistic-2.0",
  "URL": "https://pluto.coe.fsu.edu/Proc4",
  "VignetteBuilder": "knitr",
  "Support": "c( 'Bill & Melinda Gates Foundation grant \"Games as\nLearning/Assessment: Stealth Assessment\" (#0PP1035331, Val\nShute, PI)', 'National Science Foundation grant \"DIP:\nGame-based Assessment and Support of STEM-related Competencies\"\n(#1628937, Val Shute, PI)', 'National Science Foundation grant\n\"Mathematical Learning via Architectual Design and Modeling\nUsing E-Rebuild.\" (\\#1720533, Fengfeng Ke, PI)', 'Institute of\nEducational Statistics Grant: \"Exploring adaptive cognitive and\naffective learning support for next-generation STEM learning\ngames.\" (#R305A170376-20, Val Shute and Russell Almond, PIs')",
  "Config/testthat/edition": "3",
  "Config/pak/sysreqs": "libssl-dev libsasl2-dev",
  "Repository": "https://ralmond.r-universe.dev",
  "Date/Publication": "2025-06-09 00:02:16 UTC",
  "RemoteUrl": "https://github.com/ralmond/Proc4",
  "RemoteRef": "HEAD",
  "RemoteSha": "f22a748ec71e6e7e38a9bf9b6dc6e22f39bf3e96",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-06-04 08:55:53 UTC",
    "User": "root"
  },
  "MD5sum": "464740a9a2f3f39abc17a92f6996f23d",
  "_user": "ralmond",
  "_type": "src",
  "_file": "Proc4_0.8-5.tar.gz",
  "_fileid": "9fbdd0284e526cd85d463fd29e145ce6827e611c4d3e90a6562c058742fa65b8",
  "_filesize": 484152,
  "_sha256": "9fbdd0284e526cd85d463fd29e145ce6827e611c4d3e90a6562c058742fa65b8",
  "_created": "2026-06-04T08:55:53.000Z",
  "_published": "2026-06-04T08:59:13.993Z",
  "_distro": "noble",
  "_jobs": [
    {
      "job": 79484390107,
      "time": 149,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "WARNING",
      "artifact": "7407269895"
    },
    {
      "job": 79484389836,
      "time": 154,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "WARNING",
      "artifact": "7407271208"
    },
    {
      "job": 79484389936,
      "time": 125,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "WARNING",
      "artifact": "7407261297"
    },
    {
      "job": 79484389813,
      "time": 106,
      "config": "macos-release-arm64",
      "r": "4.6.0",
      "check": "WARNING",
      "artifact": "7407255647"
    },
    {
      "job": 79483855692,
      "time": 197,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7407219341"
    },
    {
      "job": 79484389843,
      "time": 136,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7407265745"
    },
    {
      "job": 79484389872,
      "time": 105,
      "config": "windows-devel",
      "r": "4.7.0",
      "check": "WARNING",
      "artifact": "7407255288"
    },
    {
      "job": 79484389829,
      "time": 87,
      "config": "windows-oldrel",
      "r": "4.5.3",
      "check": "WARNING",
      "artifact": "7407249063"
    },
    {
      "job": 79484389895,
      "time": 86,
      "config": "windows-release",
      "r": "4.6.0",
      "check": "WARNING",
      "artifact": "7407248898"
    }
  ],
  "_buildurl": "https://github.com/r-universe/ralmond/actions/runs/26941472689",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_upstream": "https://github.com/ralmond/Proc4",
  "_commit": {
    "id": "f22a748ec71e6e7e38a9bf9b6dc6e22f39bf3e96",
    "author": "Russell G Almond <russell.g.almond@gmail.com>",
    "committer": "Russell G Almond <russell.g.almond@gmail.com>",
    "message": "buildHistMat docs\n",
    "time": 1749427336
  },
  "_maintainer": {
    "name": "Russell Almond",
    "email": "ralmond@fsu.edu",
    "login": "ralmond",
    "orcid": "0000-0002-8876-9337",
    "description": "Assoc. Prof. of Measurement & Statistics @fsu",
    "uuid": 1767426
  },
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 3.0",
      "role": "Depends"
    },
    {
      "package": "methods",
      "role": "Depends"
    },
    {
      "package": "futile.logger",
      "role": "Imports"
    },
    {
      "package": "mongo",
      "role": "Imports"
    },
    {
      "package": "jsonlite",
      "role": "Imports"
    },
    {
      "package": "utils",
      "role": "Suggests"
    },
    {
      "package": "mongolite",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "tidyr",
      "role": "Suggests"
    },
    {
      "package": "CPTtools",
      "role": "Suggests"
    },
    {
      "package": "rlang",
      "role": "Suggests"
    },
    {
      "package": "bookdown",
      "role": "Suggests"
    },
    {
      "package": "devtools",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "Peanut",
      "role": "Suggests"
    }
  ],
  "_owner": "ralmond",
  "_selfowned": true,
  "_usedby": 2,
  "_updates": [
    {
      "week": "2025-24",
      "n": 1
    }
  ],
  "_tags": [],
  "_topics": [
    "assessment-scoring",
    "evidence-centered-design",
    "mongodb-database"
  ],
  "_stars": 0,
  "_contributors": [
    {
      "user": "ralmond",
      "count": 56,
      "uuid": 1767426
    }
  ],
  "_userbio": {
    "uuid": 1767426,
    "type": "user",
    "name": "Russell Almond",
    "description": "Assoc. Prof. of Measurement & Statistics @FSU"
  },
  "_downloads": {
    "count": 0,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/Proc4"
  },
  "_devurl": "https://github.com/ralmond/proc4",
  "_searchresults": 0,
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/Proc4.html",
    "extra/readme.html",
    "extra/readme.md",
    "manual.pdf"
  ],
  "_cranurl": false,
  "_exports": [
    "all.equal.P4Message",
    "app",
    "app<-",
    "as.jlist",
    "buildListener",
    "buildListenerSet",
    "buildMessage",
    "CaptureListener",
    "cleanMessageJlist",
    "cleanMessageQueue",
    "clearMessages",
    "context",
    "context<-",
    "details",
    "details<-",
    "fetchNextMessage",
    "generateListenerExports",
    "importMessages",
    "InjectionListener",
    "isListener",
    "listenerDataTable",
    "listenerName",
    "ListenerSet",
    "listeningFor",
    "markAsError",
    "markAsProcessed",
    "mess",
    "mess<-",
    "mongoAppender",
    "notifyListeners",
    "P4Message",
    "parse.jlist",
    "processed",
    "processingError",
    "receiveMessage",
    "registerOutput",
    "resetListeners",
    "resetProcessedMessages",
    "sender",
    "sender<-",
    "serializeData",
    "show",
    "TableListener",
    "timestamp",
    "timestamp<-",
    "toString",
    "uid",
    "uid<-",
    "UpdateListener",
    "updateTable",
    "UpsertListener",
    "withFlogging"
  ],
  "_help": [
    {
      "page": "Proc4-package",
      "title": "Four Process Assessment Database and Dispatcher",
      "topics": [
        "Proc4-package",
        "Proc4"
      ]
    },
    {
      "page": "buildHistMat",
      "title": "Builds history matrixes showing changes in Bayes nets over time.",
      "topics": [
        "buildAppHist",
        "buildHistMat"
      ]
    },
    {
      "page": "buildListener",
      "title": "Builds a listener from a JSON description.",
      "concept": [
        "listener"
      ],
      "topics": [
        "buildListener"
      ]
    },
    {
      "page": "buildListenerSet",
      "title": "Builds Listener Set from a a JSON configuration",
      "concept": [
        "listener"
      ],
      "topics": [
        "buildListenerSet"
      ]
    },
    {
      "page": "buildMessage",
      "title": "Converts a JSON object into a P4 Message",
      "topics": [
        "as.jlist,P4Message,list-method",
        "buildMessage",
        "cleanMessageJlist",
        "parse.jlist,P4Message,list-method"
      ]
    },
    {
      "page": "CaptureListener-class",
      "title": "Class '\"CaptureListener\"'",
      "topics": [
        "CaptureListener-class",
        "isListener,CaptureListener-method",
        "listenerDataTable,CaptureListener-method",
        "listenerName,CaptureListener-method",
        "receiveMessage,CaptureListener-method"
      ]
    },
    {
      "page": "cleanMessageQueue",
      "title": "Removes messages matching query from queue.",
      "concept": [
        "Message-Queue"
      ],
      "topics": [
        "cleanMessageQueue",
        "cleanMessageQueue,MongoQueue-method"
      ]
    },
    {
      "page": "fetchNextMessage",
      "title": "Returns the next unprocessed message from a message queue.",
      "concept": [
        "Message-Queue"
      ],
      "topics": [
        "fetchNextMessage",
        "fetchNextMessage,MessageQueue-method"
      ]
    },
    {
      "page": "generateListenerExports",
      "title": "Build tables from messages saved by the listner",
      "concept": [
        "listener"
      ],
      "topics": [
        "generateListenerExports",
        "updateTable"
      ]
    },
    {
      "page": "importMessages",
      "title": "Imports a file full of messages into a message queue.",
      "topics": [
        "importMessages",
        "importMessages,MongoQueue-method"
      ]
    },
    {
      "page": "InjectionListener-class",
      "title": "Class '\"InjectionListener\"'",
      "topics": [
        "InjectionListener-class",
        "isListener,InjectionListener-method",
        "listenerDataTable,InjectionListener-method",
        "listenerName,InjectionListener-method",
        "receiveMessage,InjectionListener-method"
      ]
    },
    {
      "page": "Listener",
      "title": "A listener is an object which can recieve a message.",
      "topics": [
        "clearMessages",
        "clearMessages,RefListener-method",
        "isListener",
        "isListener,ANY-method",
        "isListener,RefListener-method",
        "Listener",
        "Listener-class",
        "listenerName",
        "listenerName,RefListener-method",
        "listeningFor",
        "listeningFor,RefListener-method",
        "receiveMessage",
        "receiveMessage,RefListener-method",
        "RefListener",
        "RefListener-class"
      ]
    },
    {
      "page": "ListenerConstructors",
      "title": "Constructors for Listener Classes",
      "topics": [
        "CaptureListener",
        "InjectionListener",
        "TableListener",
        "UpdateListener",
        "UpsertListener"
      ]
    },
    {
      "page": "listenerDataTable",
      "title": "Fetches a data frame containing information captured by listener",
      "concept": [
        "listener"
      ],
      "topics": [
        "listenerDataTable",
        "listenerDataTable,RefListener-method"
      ]
    },
    {
      "page": "ListenerSet",
      "title": "Class '\"ListenerSet\"'",
      "topics": [
        "clearMessages,ListenerSet-method",
        "isListener,ListenerSet-method",
        "ListenerSet",
        "ListenerSet-class",
        "notifyListeners,ListenerSet-method",
        "NullListenerSet",
        "NullListenerSet-class",
        "receiveMessage,ListenerSet-method"
      ]
    },
    {
      "page": "ListQueue-class",
      "title": "Class '\"ListQueue\"'",
      "topics": [
        "ListQueue-class",
        "markAsError,ListQueue,ANY-method",
        "markAsProcessed,ListQueue,ANY-method"
      ]
    },
    {
      "page": "markAsProcessed",
      "title": "Functions for manipulating entries in a message queue.",
      "concept": [
        "Message-Queue"
      ],
      "topics": [
        "markAsError",
        "markAsError,JSONDB,P4Message-method",
        "markAsError,ListQueue-method",
        "markAsError,MongoQueue,ANY-method",
        "markAsError,NULL,P4Message-method",
        "markAsProcessed",
        "markAsProcessed,JSONDB,P4Message-method",
        "markAsProcessed,ListQueue-method",
        "markAsProcessed,MongoQueue,ANY-method",
        "markAsProcessed,NULL,P4Message-method",
        "processed",
        "processingError"
      ]
    },
    {
      "page": "MessageQueue-class",
      "title": "Class '\"MessageQueue\"'",
      "topics": [
        "MessageQueue-class"
      ]
    },
    {
      "page": "mongoAppender-class",
      "title": "Class '\"mongoAppender\"'",
      "topics": [
        "mongoAppender",
        "mongoAppender-class"
      ]
    },
    {
      "page": "MongoQueue",
      "title": "Class '\"MongoQueue\"'",
      "topics": [
        "MongoQueue-class"
      ]
    },
    {
      "page": "notifyListeners",
      "title": "Notifies listeners that a new message is available.",
      "topics": [
        "notifyListeners"
      ]
    },
    {
      "page": "P4Message",
      "title": "Constructor and accessors for P4 Messages",
      "topics": [
        "all.equal.P4Message",
        "app",
        "app<-",
        "context",
        "context<-",
        "details",
        "details<-",
        "mess",
        "mess<-",
        "P4Message",
        "sender",
        "sender<-",
        "show,P4Message-method",
        "timestamp",
        "timestamp<-",
        "toString,P4Message-method",
        "uid",
        "uid<-"
      ]
    },
    {
      "page": "P4Message-class",
      "title": "Class '\"P4Message\"'",
      "topics": [
        "app,P4Message-method",
        "app<-,P4Message-method",
        "context,P4Message-method",
        "context<-,P4Message-method",
        "details,P4Message-method",
        "details<-,P4Message-method",
        "mess,P4Message-method",
        "mess<-,P4Message-method",
        "P4Message-class",
        "processed,P4Message-method",
        "processingError,P4Message-method",
        "sender,P4Message-method",
        "sender<-,P4Message-method",
        "timestamp,P4Message-method",
        "timestamp<-,P4Message-method",
        "uid,P4Message-method",
        "uid<-,P4Message-method"
      ]
    },
    {
      "page": "registerOutput",
      "title": "Registers a file used for output information from an engine.",
      "concept": [
        "listener"
      ],
      "topics": [
        "registerOutput",
        "registerOutput,ListenerSet-method"
      ]
    },
    {
      "page": "resetListeners",
      "title": "Clears messages caches associated with listeners",
      "topics": [
        "resetListeners",
        "resetListeners,ListenerSet-method",
        "resetListeners,NULL-method"
      ]
    },
    {
      "page": "resetProcessedMessages",
      "title": "Clears the processed flags on the matching messages",
      "concept": [
        "Message-Queue"
      ],
      "topics": [
        "resetProcessedMessages",
        "resetProcessedMessages,ListQueue-method",
        "resetProcessedMessages,MongoQueue-method"
      ]
    },
    {
      "page": "serializeData",
      "title": "Produces a string with a JSON representation of an R object",
      "topics": [
        "serializeData"
      ]
    },
    {
      "page": "TableListener-class",
      "title": "Class '\"TableListener\"'",
      "topics": [
        "isListener,TableListener-method",
        "listenerDataTable,TableListener-method",
        "listenerName,TableListener-method",
        "receiveMessage,TableListener-method",
        "TableListener-class"
      ]
    },
    {
      "page": "UpdateListener-class",
      "title": "Class '\"UpdateListener\"'",
      "topics": [
        "isListener,UpdateListener-method",
        "listenerDataTable,UpdateListener-method",
        "listenerName,UpdateListener-method",
        "receiveMessage,UpdateListener-method",
        "UpdateListener-class"
      ]
    },
    {
      "page": "UpsertListner-class",
      "title": "Class '\"UpsertListener\"'",
      "topics": [
        "isListener,UpsertListener-method",
        "listenerDataTable,UpsertListener-method",
        "listenerName,UpsertListener-method",
        "receiveMessage,UpsertListener-method",
        "UpsertListener-class"
      ]
    },
    {
      "page": "withFlogging",
      "title": "Invoke expression with errors logged and traced",
      "topics": [
        "withFlogging"
      ]
    }
  ],
  "_pkglogo": "https://github.com/ralmond/Proc4/raw/HEAD/man/figures/logo.svg",
  "_readme": "https://github.com/ralmond/Proc4/raw/HEAD/README.md",
  "_rundeps": [
    "askpass",
    "formatR",
    "futile.logger",
    "futile.options",
    "jsonlite",
    "lambda.r",
    "mime",
    "mongo",
    "mongolite",
    "openssl",
    "sys"
  ],
  "_vignettes": [
    {
      "source": "Listeners.Rmd",
      "filename": "Listeners.html",
      "title": "Listener model for Interprocess Communication",
      "author": "Russell G. Almond",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Observer Design Pattern",
        "Listener Interface",
        "message sets",
        "Listener Types",
        "Capture Listener",
        "Injection Listener",
        "Upsert Listener",
        "Update Listener",
        "Table Listener",
        "ListenerSet",
        "Managing listener collection",
        "Logging messages",
        "Registering Output",
        "Configuration",
        "Database connections",
        "JSON configuration files"
      ],
      "created": "2023-07-11 21:50:53",
      "modified": "2023-07-11 21:50:53",
      "commits": 1
    },
    {
      "source": "Proc4Arch.Rmd",
      "filename": "Proc4Arch.html",
      "title": "Four Process and Event Stream Architecture",
      "author": "Russell G. Almond",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Two related architectures for scoring assessments",
        "Proc4",
        "EventStream",
        "Proc4 Message Format",
        "QTI",
        "xAPI",
        "XES",
        "Listeners and Message Queues",
        "Listeners and Listener Sets",
        "Using database collections as queues",
        "Management",
        "Process Control",
        "Persistent User Data",
        "Managing Consent",
        "Cataloging Data"
      ],
      "created": "2023-07-11 21:50:53",
      "modified": "2023-07-11 21:50:53",
      "commits": 1
    },
    {
      "source": "Dongle.Rmd",
      "filename": "Dongle.html",
      "title": "Dongle: A lightweight interface between EI, EA and AS processes and the Presentation Process",
      "author": "Russell G. Almond",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Introduction",
        "Proc4 Message Format",
        "Mongo Database Schemas",
        "AuthorizedApps Collection",
        "Players Collection",
        "Statistics Collection",
        "Activities Collection",
        "PHP communication Layer",
        "Pulling statements from the learning record store.",
        "Configuration",
        "Configuration Files",
        "Mongo Configuration",
        "PHP Dongle Configuration",
        "Event Loop Configuration",
        "Acknowledgements"
      ],
      "created": "2022-05-28 14:15:11",
      "modified": "2022-05-28 14:15:11",
      "commits": 1
    }
  ],
  "_score": 3.9542425094393248,
  "_indexed": true,
  "_nocasepkg": "proc4",
  "_universes": [
    "ralmond"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.8-5",
      "date": "2026-06-04T08:58:29.000Z",
      "distro": "noble",
      "commit": "f22a748ec71e6e7e38a9bf9b6dc6e22f39bf3e96",
      "fileid": "9370ce6f9b26fda25327bd38327e12da5f556c0b29c60ccbc161bb3980dc7a56",
      "status": "success",
      "check": "WARNING",
      "buildurl": "https://github.com/r-universe/ralmond/actions/runs/26941472689"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.8-5",
      "date": "2026-06-04T08:58:31.000Z",
      "distro": "noble",
      "commit": "f22a748ec71e6e7e38a9bf9b6dc6e22f39bf3e96",
      "fileid": "7a021668624607f868127bc5314186b2b1ab2337b0d8866249291b5e24b6be43",
      "status": "success",
      "check": "WARNING",
      "buildurl": "https://github.com/r-universe/ralmond/actions/runs/26941472689"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.8-5",
      "date": "2026-06-04T08:57:48.000Z",
      "commit": "f22a748ec71e6e7e38a9bf9b6dc6e22f39bf3e96",
      "fileid": "4308bd447a84f6412676b9f6b1ca390bac8980f80ea0f7c6468a4d76ad9af77d",
      "status": "success",
      "check": "WARNING",
      "buildurl": "https://github.com/r-universe/ralmond/actions/runs/26941472689"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "0.8-5",
      "date": "2026-06-04T08:57:49.000Z",
      "commit": "f22a748ec71e6e7e38a9bf9b6dc6e22f39bf3e96",
      "fileid": "c66ea351496b8c0fdb7e7ea8f5825a7853809b55a4822351654e88241882b8a8",
      "status": "success",
      "check": "WARNING",
      "buildurl": "https://github.com/r-universe/ralmond/actions/runs/26941472689"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.8-5",
      "date": "2026-06-04T08:58:38.000Z",
      "commit": "f22a748ec71e6e7e38a9bf9b6dc6e22f39bf3e96",
      "fileid": "1306e42c965f72e49e818d3f951c3ecc5c0d5b7bba638bbae726b00bedc768c5",
      "status": "success",
      "buildurl": "https://github.com/r-universe/ralmond/actions/runs/26941472689"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.8-5",
      "date": "2026-06-04T08:57:37.000Z",
      "commit": "f22a748ec71e6e7e38a9bf9b6dc6e22f39bf3e96",
      "fileid": "54346f682a8b05fb71df13ae4d39fbe435c5c2678240386de02c93f01b151830",
      "status": "success",
      "check": "WARNING",
      "buildurl": "https://github.com/r-universe/ralmond/actions/runs/26941472689"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.8-5",
      "date": "2026-06-04T08:57:18.000Z",
      "commit": "f22a748ec71e6e7e38a9bf9b6dc6e22f39bf3e96",
      "fileid": "1d66f6c4c3126c64c9e5f8381363112f1549543d53d2bdc3e165a2b8b42ee1c5",
      "status": "success",
      "check": "WARNING",
      "buildurl": "https://github.com/r-universe/ralmond/actions/runs/26941472689"
    },
    {
      "r": "4.6.0",
      "os": "win",
      "version": "0.8-5",
      "date": "2026-06-04T08:57:19.000Z",
      "commit": "f22a748ec71e6e7e38a9bf9b6dc6e22f39bf3e96",
      "fileid": "d71e33fe60dbadf32682f7722e532417fdfcbdf58311690b5f8638a5871d407b",
      "status": "success",
      "check": "WARNING",
      "buildurl": "https://github.com/r-universe/ralmond/actions/runs/26941472689"
    }
  ]
}