{"id":2201,"date":"2025-12-05T10:22:14","date_gmt":"2025-12-05T10:22:14","guid":{"rendered":"https:\/\/www.numbas.org.uk\/?p=2201"},"modified":"2025-12-05T10:22:14","modified_gmt":"2025-12-05T10:22:14","slug":"development-update-december-2025","status":"publish","type":"post","link":"https:\/\/www.numbas.org.uk\/theme-testing\/blog\/2025\/12\/development-update-december-2025\/","title":{"rendered":"Development update, December 2025"},"content":{"rendered":"\n<p>This is an update gathering together changes made to the Numbas software in the last few months.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/numbas\/Numbas\">Numbas runtime<\/a><\/h2>\n\n\n\n<p>I&#8217;ve tagged <a href=\"https:\/\/github.com\/numbas\/Numbas\/releases\/tag\/v9.1\">v9.1 of the Numbas runtime on GitHub<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Enhancements<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>There are new JME operators <code>nand<\/code> and <code>nor<\/code>. (<a href=\"https:\/\/docs.numbas.org.uk\/en\/latest\/jme-reference.html#nand\">documentation<\/a>)<\/li>\n\n\n\n<li>There is a new option for &#8220;match text pattern&#8221; parts, to allow the student to submit an empty answer. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1145\">issue<\/a>, <a href=\"https:\/\/docs.numbas.org.uk\/en\/latest\/question\/parts\/match-text-pattern.html#term-Allow-the-student-to-submit-an-empty-answer\">documentation<\/a>)<\/li>\n\n\n\n<li>The functions <code>isnan<\/code> and <code>withintolerance<\/code> now also work on complex numbers. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/4b6b95ee\">code<\/a>)<\/li>\n\n\n\n<li>The student is shown a confirmation dialog before following a &#8220;next part&#8221; link which will apply a penalty. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1158\">issue<\/a>)<\/li>\n\n\n\n<li>The functions <code>sum<\/code> and <code>prod<\/code> are now also defined on integers, decimals and rationals, and <code>lcm<\/code> and <code>gcd<\/code> on integers, so they&#8217;ll return the appropriate data type instead of always returning <code>number<\/code> values. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/68fd1dc8\">code<\/a>)<\/li>\n\n\n\n<li>The boolean operators <code>and<\/code>, <code>or<\/code>, <code>implies<\/code>, <code>nand<\/code> and <code>nor<\/code> are evaluated lazily, so if the left-hand argument determines the result, the right-hand side isn&#8217;t evaluated. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1037\">issue<\/a>)<\/li>\n\n\n\n<li>Images are always displayed on a white background, and there is a new &#8220;invert images in dark mode&#8221; display option. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1148\">issue<\/a>, <a href=\"https:\/\/docs.numbas.org.uk\/en\/latest\/accessibility\/exam.html#change-the-colours-of-text-and-the-page-background\">documentation<\/a>)<\/li>\n\n\n\n<li>In the default theme, scrollbars use the same colour as borders. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/b586e8a4\">code<\/a>)<\/li>\n\n\n\n<li>There is a question variable <code>variable_generation_run_number<\/code>, to help with deterministically generating variable sets that satisfy a condition. (<a href=\"https:\/\/docs.numbas.org.uk\/en\/latest\/question\/reference.html#variable-testing\">documentation<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Bug fixes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The function <code>Numbas.loadStandaloneScript<\/code> takes a <code>type<\/code> parameter. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/b4db773e\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the <code>dom<\/code> binding handler so it copes with a list of nodes, such as a list of images produced in marking feedback. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/3ec43382\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the score feedback object in the worksheet theme. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/9073318f\">code<\/a>)<\/li>\n\n\n\n<li>The <code>datetime<\/code> binding handler deals with empty values. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/59902e6f\">code<\/a>)<\/li>\n\n\n\n<li>Fixed bugs in <code>ExamDisplay.advance<\/code> and <code>reverse<\/code>. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/764cf7c6\">code<\/a>)<\/li>\n\n\n\n<li>Fixed <code>Numbas.controls<\/code> when working with the pre-2025 default theme. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/c5e9784f\">code<\/a>)<\/li>\n\n\n\n<li>Fixed a bug which led to the page footer being rendered off the bottom of the page. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/9c26d84e\">code<\/a>)<\/li>\n\n\n\n<li><code>\\var<\/code> and <code>\\simplify<\/code> always put braces around the produced TeX. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/e7c9a47e\">code<\/a>)<\/li>\n\n\n\n<li>When rendering long variable names to TeX, underscores are escaped. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/f17b4887\">code<\/a>)<\/li>\n\n\n\n<li>A variable name consisting of a single underscore is rendered as <code>\\_<\/code> in TeX. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/f8edf201\">code<\/a>)<\/li>\n\n\n\n<li>SVG elements have <code>font-size-adjust: none<\/code>. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/b6f4d199\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the OK\/cancel buttons on the &#8220;confirm end exam&#8221; modal dialog. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/ac1f1da5\">code<\/a>)<\/li>\n\n\n\n<li>In the worksheet theme, the &#8220;allow students to print their transcript&#8221; option is ignored, so all elements are always printed. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/e04aaeed\">code<\/a>)<\/li>\n\n\n\n<li>SVG produced by MathJax is forced to have no background colour or filter. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/d0281fde\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the background and text color on dialogs, when a custom colour scheme is used. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/d024983e\">code<\/a>)<\/li>\n\n\n\n<li>Made sure the theme&#8217;s <code>font-size-adjust<\/code> style is not applied to MathJax output. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1146\">issue<\/a>)<\/li>\n\n\n\n<li>Fixed a bug affecting exams with the text <code>&lt;script&gt;<\/code> literally in their source. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1149\">issue<\/a>)<\/li>\n\n\n\n<li>Fixed loading extensions in standalone packages. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/77700586\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the offline analysis page when loaded from the editor. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/464f035d\">code<\/a>)<\/li>\n\n\n\n<li>In the <code>old-default-2024<\/code> theme, fixed loading the <code>storage<\/code> attribute from <code>&lt;numbas-exam&gt;<\/code>. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/2ae92e32\">code<\/a>)<\/li>\n\n\n\n<li>SVG images are always rendered with the text colour set to black, regardless of the chosen colour scheme. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1153\">issue<\/a>)<\/li>\n\n\n\n<li>Fixed a bug affecting the colour of text inside part feedback messages.  (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1152\">issue<\/a>)<\/li>\n\n\n\n<li>MathJax SVG output gets <code>color: inherit<\/code> to match the surrounding text. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1153\">issue<\/a>)<\/li>\n\n\n\n<li>Fixed a bug to do with the timing of the image lightbox code. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/a0d2a1ba\">code<\/a>)<\/li>\n\n\n\n<li>In the default theme, fixed a layout bug affecting print media. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/51947972\">code<\/a>)<\/li>\n\n\n\n<li>Added a polyfill for <code>Promise.withResolvers<\/code>, to ensure compatibility with older browsers. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/c1e9c15a\">code<\/a>)<\/li>\n\n\n\n<li>Fixed a bug affecting the &#8220;OK&#8221; button on dialogs in Chrome. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/8d9cdfbc\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the LaTeX rendering of the <code>set<\/code> function. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/36c567b1\">code<\/a>)<\/li>\n\n\n\n<li>The parser looks for any opening bracket character when trying to find a matching bracket. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/edeb158a\">code<\/a>)<\/li>\n\n\n\n<li>The method <code>Scope.getFunction<\/code> applies function synonyms. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/fa870d41\">code<\/a>)<\/li>\n\n\n\n<li>Fixed a bug with highlight colours when using the white-on-black colour scheme. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/50d5c19d\">code<\/a>, <a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1154\">issue<\/a>)<\/li>\n\n\n\n<li>Updated the Norwegian Bokm\u00e5l translation with better phrasing, thanks to Lars Hansson. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/d2393525\">code<\/a>)<\/li>\n\n\n\n<li>Gap-fill parts don&#8217;t show an extra, empty expected answer box. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1151\">issue<\/a>)<\/li>\n\n\n\n<li>The old-default-2024 theme doesn&#8217;t use <code>shadowRoot<\/code>. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/022b0533\">code<\/a>)<\/li>\n\n\n\n<li>The LaTeX rendering copes with MathJax&#8217;s asynchronous processing model. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/47c05e9b\">code<\/a>)<\/li>\n\n\n\n<li>The package build time is added to the URL for the <code>numbas-mathjax<\/code> script, so new versions are fetched instead of using an old version from the browser cache. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/43ba6bf9\">code<\/a>)<\/li>\n\n\n\n<li>The unit tests now check for functions whose randomness is not explicitly stated. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/d4b5f812\">code<\/a>)<\/li>\n\n\n\n<li>The JavaScript function <code>Numbas.math.Fraction<\/code> checks for denominator <code>undefined<\/code>, using a default of 1. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/7e60d6a1\">code<\/a>)<\/li>\n\n\n\n<li>Fixed a bug to do with page breaks between questions in the worksheet theme. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1157\">issue<\/a>)<\/li>\n\n\n\n<li>Fixed a bug which meant the random number generator seed wasn&#8217;t loaded from attempt suspend data. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/issues\/1160\">issue<\/a>)<\/li>\n\n\n\n<li>The test for whether an expression is deterministic or random looks inside the body of anonymous functions. (<a href=\"https:\/\/github.com\/numbas\/Numbas\/commit\/2115d9a6\">code<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Extensions<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>I updated all first-party extensions to state whether JME functions are deterministic or random.<\/li>\n\n\n\n<li>Eukleides: \n<ul class=\"wp-block-list\">\n<li>There is a new style command, <code>aligned<\/code>.<\/li>\n\n\n\n<li>The <code>text<\/code> function now takes an optional angle argument. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-eukleides\/commit\/0934402\">code<\/a>)<\/li>\n\n\n\n<li>SVG elements produced by the extension now have an <code>xmlns<\/code> attribute. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-eukleides\/commit\/05d8f97\">code<\/a>)<\/li>\n\n\n\n<li>Pointer enter\/leave event handlers are always added to diagrams, even if they&#8217;re not animated. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-eukleides\/commit\/5749801\">code<\/a>)<\/li>\n\n\n\n<li>There is a new <code>grid<\/code> function which lays subdiagrams out on a grid. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-eukleides\/commit\/0616588\">code<\/a>)<\/li>\n\n\n\n<li>Diagrams are inside a render container element, so external transformations can be applied. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-eukleides\/commit\/70af2fd\">code<\/a>)<\/li>\n\n\n\n<li>Fill and stroke colours on elements are set in CSS, so they&#8217;re not overridden by styles inherited from parent elements. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-eukleides\/commit\/dadaf96\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the rendering of filled arcs. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-eukleides\/commit\/a76cb05\">code<\/a>)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>GeoGebra:\n<ul class=\"wp-block-list\">\n<li>GeoGebra applets force the style <code>text-align: start<\/code>. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-geogebra\/commit\/9fdfac1\">code<\/a>)<\/li>\n\n\n\n<li>When creating an applet, it waits for the container element to be made before injecting the GeoGebra applet. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-geogebra\/commit\/d98a6ef\">code<\/a>)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>JSXGraph: updated to JSXGraph 1.12.0. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-jsxgraph\/commit\/76ae8c4\">code<\/a>)<\/li>\n\n\n\n<li>Linear algebra: it uses the <code>Fraction<\/code> data type from the Numbas core, instead of its own version. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-linearalgebra\/commit\/82734d4\">code<\/a>)<\/li>\n\n\n\n<li>Programming:\n<ul class=\"wp-block-list\">\n<li>Replaced the Ace editor with CodeMirror 6. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-programming\/commit\/375706f\">code<\/a>)<\/li>\n\n\n\n<li>Fixed max-width of the code-editor element on narrow viewports. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-programming\/commit\/575746e\">code<\/a>)<\/li>\n\n\n\n<li>Fixed loading question resources in pyodide. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-programming\/commit\/74fa3f5\">code<\/a>)<\/li>\n\n\n\n<li>Only the first megabyte of code output is kept. (<a href=\"https:\/\/github.com\/numbas\/numbas-extension-programming\/commit\/f242f98\">code<\/a>)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/numbas\/editor\">Numbas editor<\/a><\/h2>\n\n\n\n<p>I&#8217;ve tagged <a href=\"https:\/\/github.com\/numbas\/editor\/releases\/tag\/v9.1\">v9.1 of the Numbas editor on GitHub<\/a>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Documentation: added a link to the generic runtime example page. (<a href=\"https:\/\/docs.numbas.org.uk\/en\/latest\/embedding.html#example\">documentation<\/a>)<\/li>\n\n\n\n<li>Fixed a bug affecting previews of exams accessed through a token. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/fa729824\">code<\/a>)<\/li>\n\n\n\n<li>Fixed a bug in the resource uploader interface. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/35f2fbaf\">code<\/a>)<\/li>\n\n\n\n<li>Superusers are shown a link to the admin site in the top-nav dropdown. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/0082ff96\">code<\/a>)<\/li>\n\n\n\n<li>The admin interface can show exams using a particular theme. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/074b4c37\">code<\/a>)<\/li>\n\n\n\n<li>Various other improvements to the admin interface. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/1c18f8a2\">code<\/a>)<\/li>\n\n\n\n<li>The custom part type editor knows about functions provided by extensions. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/2d2d978d\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the &#8220;empty your basket&#8221; button. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/bf03febd\">code<\/a>)<\/li>\n\n\n\n<li>Fixed a bug to do with updating the rich content editor. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/5627b29f\">code<\/a>)<\/li>\n\n\n\n<li>Documented the methods, events and properties of the <code>&lt;numbas-exam&gt;<\/code> element. (<a href=\"https:\/\/docs.numbas.org.uk\/en\/latest\/embedding.html#embedding-a-numbas-exam\">documentation<\/a>)<\/li>\n\n\n\n<li>Documented numbas-theme.json (<a href=\"https:\/\/docs.numbas.org.uk\/en\/latest\/themes\/index.html#theme-metadata\">documentation<\/a>)<\/li>\n\n\n\n<li>Added an example of embedding an exam with extension data. (<a href=\"https:\/\/docs.numbas.org.uk\/en\/latest\/embedding.html#extension-data\">documentation<\/a>)<\/li>\n\n\n\n<li>Updated the initial styles.css for a new theme. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/c7618480\">code<\/a>)<\/li>\n\n\n\n<li>Fixed a bug affecting data exports, to do with the profile&#8217;s preferred MathJax URLs. (<a href=\"https:\/\/github.com\/numbas\/editor\/issues\/400\">issue<\/a>)<\/li>\n\n\n\n<li>When finding undefined variables, consider all variables defined in the base scope as bound. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/3346fee8\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the check for being inside a maths environment, used by the instant LaTeX preview in the rich content editor. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/358f2956\">code<\/a>)<\/li>\n\n\n\n<li>When loading a question group, it now copes with the <code>variable_overrides<\/code> list not being long enough. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/0ae2590a\">code<\/a>)<\/li>\n\n\n\n<li>Fixed a bug to do with variables defined using destructuring syntax. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/cfe7d1af\">code<\/a>)<\/li>\n\n\n\n<li>A reversion record is no longer created for every change. Instead, they&#8217;re only created when you explicitly set a checkpoint. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/05550cd9\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the &#8220;Upload a new theme&#8221; button when you have no existing themes. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/a690d3c6\">code<\/a>)<\/li>\n\n\n\n<li>The editor doesn&#8217;t repeatedly try to load failed extensions; failed extensions don&#8217;t stop the page loading. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/ea4304ff\">code<\/a>)<\/li>\n\n\n\n<li>Fixed a race condition with loading extensions in the custom part type editor. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/bd5b95c5\">code<\/a>)<\/li>\n\n\n\n<li>Improved the behaviour of the LaTeX preview inside <code>\\begin{\u2026}<\/code> environments. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/8326152e\">code<\/a>)<\/li>\n\n\n\n<li>The measurement of auto-sized input elements accounts for the element&#8217;s border style. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/6cb65600\">code<\/a>)<\/li>\n\n\n\n<li>The question editor copes with multiple definitions of functions with the same name. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/e9f9075d\">code<\/a>)<\/li>\n\n\n\n<li>Variables are considered random if they&#8217;re not explicitly deterministic and if they use a random function. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/f213d066\">code<\/a>)<\/li>\n\n\n\n<li>Function definition errors are cleared before redefining them. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/5c8b3395\">code<\/a>)<\/li>\n\n\n\n<li>Fixed a bug in the access controls for custom part types. (<a href=\"https:\/\/github.com\/numbas\/editor\/commit\/aedee34f\">code<\/a>)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\">Numbas LTI provider<\/a><\/h2>\n\n\n\n<p>I&#8217;ve tagged <a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/releases\/tag\/v4.4\">v4.4 of the Numbas LTI provider on GitHub<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Enhancements<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>When the &#8220;Invalid Nonce&#8221; error is thrown on launching an LTI link, a hint about cache settings is shown. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/bc886d5\">code<\/a>)<\/li>\n\n\n\n<li>Report filenames use the YYYY-MM-DD format for dates. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/9fb595c\">code<\/a>)<\/li>\n\n\n\n<li>The access change form always shows the usernames and emails textareas, in addition to the searchable list. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/issues\/358\">issue<\/a>)<\/li>\n\n\n\n<li>The attempts table is now sortable. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/issues\/247\">issue<\/a>)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Bug fixes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fixed a bug which meant users with an instructor role were sometimes reuqired to use the lockdown app to view a resource. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/0f02e26\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the user score report records so that null values can be recorded. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/5f1076c\">code<\/a>)<\/li>\n\n\n\n<li>Fixed a syntax typo in the Docker installation instructions. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/issues\/368\">issue<\/a>)<\/li>\n\n\n\n<li>Fixed a bug with getting the end time of attempts which have not been started. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/938e54e\">code<\/a>)<\/li>\n\n\n\n<li>Fixed loading attempt data in the re-mark page. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/92baa2d\">code<\/a>)<\/li>\n\n\n\n<li>The re-mark page doesn&#8217;t try to re-mark attempts with no suspend data. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/895c26b\">code<\/a>)<\/li>\n\n\n\n<li>Documented the <code>LOCKDOWN_APP.minimum_versions<\/code> setting in the upgrade instructions. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/59b5c10\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the link to install the Numbas lockdown app. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/3e5cf1e\">code<\/a>)<\/li>\n\n\n\n<li>The re-marking page loads extensions and catches errors thrown while re-marking an attempt. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/1ebcbf1\">code<\/a>)<\/li>\n\n\n\n<li>Changed the pylti1p3 package to pylti1p3next. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/07ed793\">code<\/a>)<\/li>\n\n\n\n<li>SCORM data listing: when the filter pattern is invalid, no elements are matched. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/issues\/371\">issue<\/a>)<\/li>\n\n\n\n<li>An attempt is always shown as &#8216;Complete&#8217; if it was automatically ended. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/acfd0f5\">code<\/a>)<\/li>\n\n\n\n<li>Attempt SCORM data is only saved to local storage once the attempt has been fully initialised. This resolves a race condition when the same attempt is opened twice very quickly, and Websockets aren&#8217;t available. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/d9f1240\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the Blackboard LTI documentation link. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/a4b49ce\">code<\/a>)<\/li>\n\n\n\n<li>Requests to the LTI platform can time out. This fixes a bug where request handler processes would get stuck indefinitely waiting for a request that will not complete. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider\/commit\/dc846aa\">code<\/a>)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider-docker\">Numbas LTI provider Docker<\/a><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Changed the installation instructions to recommend only running one huey container. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider-docker\/commit\/349fd98\">code<\/a>)<\/li>\n\n\n\n<li>Added lockdown app minimum versions to settings.py. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider-docker\/commit\/651dad3\">code<\/a>)<\/li>\n\n\n\n<li>Fixed the postgres version (a data migration is needed for existing installations). (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider-docker\/commit\/fb91a13\">code<\/a>, documentation)<\/li>\n\n\n\n<li>Added a healthcheck to the postgres container. (<a href=\"https:\/\/github.com\/numbas\/numbas-lti-provider-docker\/commit\/cb51647\">code<\/a>)<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is an update gathering together changes made to the Numbas software in the last few months.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[10],"tags":[],"_links":{"self":[{"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/posts\/2201"}],"collection":[{"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/comments?post=2201"}],"version-history":[{"count":5,"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/posts\/2201\/revisions"}],"predecessor-version":[{"id":2206,"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/posts\/2201\/revisions\/2206"}],"wp:attachment":[{"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/media?parent=2201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/categories?post=2201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.numbas.org.uk\/theme-testing\/wp-json\/wp\/v2\/tags?post=2201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}