Change Log

Change Log

1.14.9

Enhancements
  1. The $report stage now renders the same in the VQL workshop as well as the dashboard system
  2. $median is available as a metric in VQL.
  3. Canonical Activities can be exported and restored from the UI
  4. Statement viewer reports can be updated in place without creating new versions
  5. Reenable JSON6 parsing for saved VQL scripts in order to support multiline strings
  6. When using a boolean as an aggregation key in ElasticSearch mode, the values are interpreted as the strings "true" and "false" instead of boolean values. The makes the charts look more like one would expect
  7. Most API calls from the front end will now redirect the page to the login screen if the user is logged out


1.14.8

Enhancements
  1. Add a new meta field "meta.responseDisplay". This field will compute the display value of the result.response xAPI value based on the object.definition. It will NOT check the canonical activity description, but only compute the proper display based on the object.definition that is in the statement itself. This can be useful when aggregating over multiple different questions that have similar responses, but different response IDs. In cases where the interaction data descriptions are multilingual, the display value will be based on the first language code alphabetically. 
  2. Allow stacked bar charts to still use X axis title based sorting

1.14.7

Enhancements
  1. Better feedback from the Elasticsearch resync job.
  2. JSON6 fails to parse some valid inputs! We've swapped all loose parsing to JSON5
Bugfixes
  1. Fix an issue that prevented scripted keys from running after they were edited


1.14.6

Bugfixes
  1. Fix a dashboard refresh issue, when changing parameters would not prompts some charts to refresh
Enhancements
  1. Across all forms, don't allow the submit button to be clicked twice
  2. Add a beta Tableau report integration




1.14.5

MongoDB connection strings that include the term "localhost" may need to be updated. If the LRS does not connect to your local database, please change "localhost" to "127.0.0.1".

The 1.14 branch represents a major update to the LRS platform. Like all versions, it is backwards compatible, and can be installed in the same manner as other updates. This section is a work in progress and will be updated over time. 

LRS.io has been configured to allow a browser to choose which version to interact with, 12.x or 14.x. This behavior is controlled by a cookie called 'proxy_override'. Setting this cookie to 'true' will cause our load balancer to route the request to the 1.14.x server pool. Any value other than 'true', or no value at all, will send the request to the 12.x pool. The user interface in LRS.io mode includes a switch to set this cookie. In January 2024, we will change the default behavior to route all traffic to the 14.x pool, unless the cookie value is explicitly 'false'. By the end of the first quarter 24, we will stop honoring the cookie altogether and route all traffic to 1.14. 

The most visible change in this version is a complete rewrite of the front end user interface. We expect this will significantly increase usability. All customizations of the front end CSS will no longer have any effect, and you'll need to provide an MUI style in JSON format to style the UI. 

Additional changes include

xAPI 2.0 support
Update to some edge case VOID logic
More direct column analytics in the Statement Viewer
Update underlying script engine to Node 18
Password dictionary blacklisting
Permissions on saved reports







1.12.11

Bug Fixes

  1. Disable the automatic layout of new chart widgets. In some cases, this function would inappropriately move widgets.
  2. Update the statement voiding logic to use JSON paths that have DB indexes. This prevents some timeout errors when voiding statements in a large data set
  3. Some functions that would be expected to be assigned to the "lrs.analytics" or "lrs.settings.edit" permissions were incorrectly limited to top level "lrs" permission. This has been fixed. 
  4. Add a system counter to track the number of anonymous content launches.
  5. Add CSRF logic to all PUT, POST and DELETE calls where the user is expected to be logged in. Checks the referrer header to prevent CSRF.
  6. Additional properties for configuring outgoing email. Now supports unauthenticated SMTP
  7. Fix a bug related to logging in with email accounts that have capital letters in specific locations.
  8. Several updates on the LRS.io version to account for the "Try our new UI" button. 

1.12.10

The release adds a new VQL stage focused on building tabular reports. 

New Features

  1. Add a $report stage to VQL for tabular reports. 
  2. Add a property to a barchart to render horizontally. Add the field "orientation":"horizontal" to your $barChart stage.
  3. The Interaction widget will now display a pie chart and an average score for Likert questions. The value used to compute the average is the position in the array of the given "scale" ID from the interaction definition. 
  4. Add a path to manually specify the duration of a video in the video histogram. Some data sets include incorrect specification of the total length. The given length MUST BE EQUAL OR GREATER than all data points in the dataset for the renderer to work properly.

Bug Fixes

  1. Fix an error that prevented the $inlineExpression VQL macro from working in some situations
  2. Fix an error that prevented some Custom dashboards from being displayed in the "Manage plugin dashboards" UI.
  3. Fix the application of parameters in the VQL workshop
  4. Fix path expansion logic for extensions with a specific form
  5. Allow column headers to wrap in the statement viewer
  6. The "Restore a backup" function did not work properly when the system level Mongo connection string included an amperstand. 

Changes

  1. The "Run Script" in the "Manage Saved Scritps" UI will now show a single chart, if the process calls for a chart render. It will not automatically format JSON data into a table. If you wish to render the saved script as a table, it must include the $table command, as it would in the VQL workshop and the analytics system.
  2. Add additional properties to the VQL workshop schema
  3. When an $inlineSubQuery (or $inlineExpression) contains a call to $context that is not resolved, the subquery will not be evaluated, but passed unmodified deeper into the planning process. This allows an $inlineSubQuery to properly exist within a stage that includes its own VQL code, like a $query or a $report stage. Otherwise, selectors in the $report could not include inlineSubQueries, because those queries would be evaluated at plantime for the top level VQL that contained the $report. We don't expect this to have any real ramifications for existing, working VQL scripts. The error path may differ in some cases. 



1.12.9

The release adds a few query updates to the statement viewer, and includes updates to our internal build process. 

New Features

  1. Add the "$exists" operator to the statement viewer. When set to true or false, the query will identify whether or not ANY value exists on the given path, or whether the value at the path is undefined
  2. Add sorting to custom columns in the statement viewer
  3. Builds are now released as container images on DockerHub. The official LRS container image can be found here: https://hub.docker.com/r/veracitylrs/veracitylrs
  4. The release of builds to the file distro server are now a separate step from the deployment to production lrs.io

Bug Fixes

  1. Fix an error that causes a page refresh when clicking the "apply" button while adding a type-in path segment to a custom column definition in the statement viewer
  2. In general, much better data type handling for statement filters in the statement viewer. Boolean and date types are properly respected in the $in and $nin operators
  3. Fix an issue where the filter layers that are applied to the query are not always reflected in the configuration dialog, which could sometimes show older configurations

1.12.8

This release primarily focuses on under-the-hood updates, including allowing more VQL queries to use ElasticSearch, plus some user interface updates. 

New Features

  1. Compute and display overall package completion of content packages
  2. Add an endpoint on the learner portal UI to facilitate the use of an API generated launch token as a mechanism to allow a user to access content
    1. When the API is used to generate a launch token, the UUID of that token can be passed to this address
      1. https://${yourlrs}.lrs.io/portal/launch/${launch_token_uuid}/consume
    2. The learner associated with the launch will be logged in, and the content presented
    3. The token cannot be used a second time
    4. The token must be used with one minute of allocation
  3. Allow the activity explorer to use either parent or grouping context type
  4. Record the assumed language of a statement and create a new meta field, meta.language.
  5. The analytics custom dashboard system will automatically lay out widgets when they overlap.

Bug Fixes

  1. Fix a bug that caused some embedded dashboard to use specific parameter values, even when the embed link was generated with "allow parameter modification" set to true
  2. Fix a rare bug in the automatic escaping of some xAPI extensions

Other Changes

  1. Add additional column for 'display name' to the LRS management list.
  2. Add additional column for 'override name' to the canonical activities list.
  3. Update internal test suite to use newer MongoDB
  4. Report status of the resync upstream and harvest statements jobs in the UI
  5. Additional locations in the UI now respect the override canonical name
  6. The video histogram now uses ElasticSearch when available
  7. The VQL query planner will translate filters with $like, $exists and $nin to ES
  8. Allow the $parseDate VQL operator to take a proper date input, for cases where the value has been previously parsed
  9. Support $exists in ES mode.
  10. Allow accumulator VQL stages to work normally when they are not the first operation in a process
  11. Add a plugin hook to allow plugins to intercept the canonicalization of agents and activities
  12. Serve a robots.txt file to disable crawling
  13. Add the timestamp to statements on upload if they don't include one.
  14. On content upload of Tincan packages, default the content record to use the activity ID inside the manifest, instead of generating our own. 
  15. Hide activity cards on the homepage when there is no data
  16. Add build pipeline stages to construct a container and push to DockerHub

Migrations


No migrations are necessary. There are additional database indexes called for, and you may see the "This LRS appears to need database maintenance" warning. This can be cleared by rebuilding the indexes. 

1.12.7

Major update to the Analytics debugging tool. Refactored to use Monaco editor with VQL autocomplete! 

Major new features in the Analytics Debugger
  1. Multi-tab editing
  2. Save/load scripts
  3. Visualization of pipeline stages
  4. Run a pipeline to a single stage, or execute just the filter or sub-query portions
  5. Autocomplete based on the VQL schema
  6. Resizable tabs

Bug fixes

  1. Fixed the $forEach analytics stage (Not used internally, but useful for some specific clients)
  2. Don't sanitize content launch URLs, to allow query string parameters to be properly passed to clientside content.
  3. Fix the display of the --help output on the command line. 

Updates

  1. Update VQL examples to work better with the generated sample data sets. 
  2. Update UI to reference the new documentation location
  3. Improve the usability of the --no-color flag.
  4. Allow the inline editing of statement viewer filters, rather than forcing the user to destroy and recreate a filter layer to edit
  5. Add a setting to control the total post size allowed for JSON POSTS

Migrations Notes

  1. In some cases, the new JSON post limit (--jsonPostLimit=100kb) default may be to small. This can cause large batch xAPI POSTs to fail. Prior to build 11,  the default was 100kb. Post build 11, the default is raised to 50mb to prevent upgrade complexities. 

1.12.6


Update underlying Mongoose library. Refactor internal connection pool to use driver side DB selection, greatly reducing the number of total database connections necessary to server a large number of LRSs. Remove old connection pooling logic. Add a new "picker" interface and UI element to abstract out the task of allowing the user to locate a verb, activity or object when building filters in the statement viewer and analytics.

Bug Fixes

  1. When a VQL pipeline explicitly returns null in the context of the xapi/analyze endpoint, return a 200 instead of a 400
  2. Fix connection string parsing for a specific form of MongoDB connection strings.

Updates

  1. Display path suggestions for array fields in the path picker autocomplete when in MongoDB mode.
  2. Improve the performance of canonical table updates for Agents
  3. Add a mechanism for a super-admin to easily log in as a given user to check their permissions
  4. In LRS.IO SaaS mode, add a report for which tenants are active, and which are approaching quota limits. 
  5. Add a canonical name override field to activity definitions. 
  6. Add the text "key" and "secret" to access key display, as part of a long term strategy to begin using these terms.
  7. Add a "not in population" ($ninpop) operator to the analytics UI
  8. Allow playback of Youtube videos in the integrated video player
  9. Add the saved statement viewer reports to the LRS API
  10. Change the scope of the session cookie to use the webRoot settings

Migration Notes

  1. The update to the session cookie path can sometimes cause users to have strange login behaviors. Users may need to clear cookies or clear all site data to avoid unexpected redirects on login or logout. 

1.12.5

Add server queueing mechanism for analytics. This better shares access to a server in a deployment with many different LRSs.

Updates

  1. Improved UI in the Activity Explorer.
  2. Better results when clicking "all statements" from the Activity Explorer. This now shows statements where meta.relatedActivities includes the ID in question
  3. Allow the use of meta fields in filters in the statement viewer
  4. Use ElasticSearch to speed up the statement viewer when possible

1.12.4


Update UI Bootstrap version to 5. Rebuild UI as necessary. Add the Gauge render type and single Metric analytics widget

Updates

  1. Use the minimum of storageSize and dataSize when computing quota percentage. 
  2. Parse time ranges server side except in the case of custom ranges, so embeddable dashboards dont end up baking in the end date

1.12.3


Refactor to the Learning Locker migration plugin. Use a websocket to upload content packages when possible. 

Updates

  1. Send an initialized statement on anon launch
  2. Parse time ranges server side except in the case of custom ranges, so embeddable dashboards don't end up baking in the end date
  3. Fix the display of the default time range, and make sure the activity pickers don't incorrectly specify a type filter
  4. Fix error in logging print statement when lite version does not support a MongoDB replicaset

1.12.2 - 1.12.1

  1. Refactor codebase to no longer use separate build paths and executables for enterprise vs lite. Now, the feature level is controlled by the license key. 
  2. Integrate API keys with the permissions system. API Keys can now have specific permissions. 
  3. Allow the res.message command to render pretty JSON with the React JSON viewer, rather than displaying the raw text
  4. The server will now attempt to reconnect to ElasticSearch if a connection is lost.
  5. Fix a bug in counting the number of bytes in an uploaded ZIP package
  6. Get a small performance boost by never upserting data that would change the canonical agent ID anyway
  7. Encrypt instead of hashing the processor configuration. Fix the intersection of filters on dashboards
  8. New VQL pipeline renderer - Handlebars.