Table of Contents

Release Notes - 23 May 2026

AI Educator Copilot

New tool for educators at educator/ai-copilot.php providing two AI-powered commands, powered by Claude.

Create Course - Generate a structured course outline from a topic description. The AI returns a course title, description, and 5-8 progressive modules with titles, descriptions, and estimated durations. Educators can use the output as a starting point for course planning on the platform.

Improve Lesson - Provide an existing lesson URL, title, and description; the AI suggests concrete improvements across learning objectives, structure, engagement, and accessibility. Returns actionable bullet-point recommendations tailored to the lesson's current description.

Requires educator account (account level 3 or higher).

AI Explain This

Real-time lesson explanation powered by Claude, accessible from within a lesson. When a learner activates “Explain this”, the platform calls the Claude API and returns a formatted explanation of the lesson content. Intended to reduce friction when learners encounter unfamiliar concepts in lesson materials.

API endpoint: api/api-ai-explain.php. Implements RM-01.

My Learning Graph

New personal learning visualisation at learning-graph.php. Displays a learner's full lesson view history: total views, unique lessons studied, first and most recent lesson view, and a time-series view of learning activity. Gives learners a longitudinal record of their engagement with platform content.

LMS Automation Rule Analytics

New admin dashboard at admin/lms-rule-analytics.php for monitoring LMS automation rule execution. Displays:

Supports identifying misfiring or stale automation rules before they impact learner experience.

Collection Create from Template

New collection creation flow at collection/collection-create-fromTemplate.php. Allows an administrator to create a new collection by copying the structure (fields, configuration, and metadata) of an existing collection. Reduces setup time when multiple collections share the same field schema.

Platform Event Bus

Internal publish/subscribe event system (lib/libgeneral/fn_general_events.php) enabling loose coupling between platform subsystems. Subsystems register event handlers at include time; features fire named events without knowing which handlers are subscribed.

Supported events: lesson.completed, quiz.passed, quiz.failed, badge.earned, workflow.completed, user.created, certificate.awarded, deadline.approaching, course.enrolled, course.completed, path.completed, cohort.joined.

Used by the LMS Automation Rules engine as the trigger layer.

Outbound Webhook Delivery

Unified webhook library (lib/libgeneral/fn_general_webhook.php) consolidating outbound HTTP delivery across the platform. Features:

Used by Collection API webhooks and LMS rule webhook actions.

Lesson Staleness Detection Cron

New annual cron job (cron/jobs/lesson_staleness.php) that checks AI-generated published lessons for dead or unreachable resource URLs. Processes lessons in batches of 50, using concurrent HTTP HEAD requests (5 at a time, 5-second timeout) to check each lesson's material URLs. Records needs_refresh or staleness_check status to AIGenerationLog for surfacing in the AI governance dashboard.

Part of the AI content pipeline (P3-05). See: AI Review Queue.

User Lesson Record Delete

Administrators can now delete a learner's lesson record via admin/userLesson_Delete-confirm.php. The flow includes a confirmation step before deletion to prevent accidental removal. Useful for correcting erroneously assigned lesson completions or test data cleanup.

Spam Protection: Signup Rate Limiting

SP-01: Signup attempts are now rate-limited per IP address. More than 10 signup attempts from the same IP within a 60-minute window are blocked. Disposable email domains (30 known providers) are blocked at signup. Follows the same pattern as the existing login rate limiter. No friction added for legitimate users.

BPMN 2.0 Interoperability

The Workflow Designer gains four new capabilities for working with the BPMN 2.0 standard (K92).

Phase A - BPMN Export

Any workflow template can be downloaded as a valid BPMN 2.0 XML file (.bpmn) directly from the template list row or the canvas editor toolbar. The exported file includes BPMN Diagram Interchange (DI) position data so diagrams render correctly in Camunda, Bizagi, draw.io, and other BPMN tools.

Node type mapping: Start ? startEvent, End ? endEvent, Step/Assign/Checklist ? userTask, Service ? serviceTask, Decision ? exclusiveGateway, Fork ? parallelGateway (Diverging), Join ? parallelGateway (Converging). Assign node lanes are emitted as a BPMN laneSet.

Phase B - BPMN Import

Upload any .bpmn or .xml from a BPMN 2.0 tool via the Import BPMN form on the designer list page. The importer uses a namespace-aware DOMXPath parser with XXE protection (external entity loading disabled, LIBXML_NONET, 2 MB cap). Unsupported elements are skipped with warnings. DI position data is applied to the LEAST canvas. The original BPMN source is stored on the template for round-trip fidelity. Every import is audited in the new BPMNImportLog table.

Phase C - Workflow Simulation

A “Simulate” button on the canvas editor toolbar enters a read-only step-through mode without a server round-trip. Active node is highlighted; visited nodes are marked as a trail. At Decision or Fork nodes a prompt asks which branch to follow. Simulation ends at the End node with a “Simulation complete” message. Canvas editing is restored on exit.

Phase D - AI Workflow Generator

Plain-English prompt ? ready-to-edit workflow canvas. Admin describes a process in the AI Workflow Generator form on the designer list page. The platform calls Claude Sonnet (claude-sonnet-4-6), which returns a JSON workflow definition (nodes, edges, name). A new Draft WorkflowTemplate is created and the admin is redirected to the canvas editor. Falls back gracefully if the AI key is not configured.

Schema: txtWT_BPMN_Source (MEDIUMTEXT) added to WorkflowTemplate; BPMNImportLog audit table created.

Workflow Timer Node

New Timer node type in the Workflow Designer (K93). A Timer node pauses a workflow instance for a configured number of minutes and then advances it automatically - no human action required.

Configuration: set the duration in minutes (minimum 1) and optionally an escalation node to route to when the timer fires instead of following the normal outgoing edge.

Runtime behaviour:

  1. Engine arrives at a Timer node ? inserts a WorkflowInstanceEvent row (status Pending, trigger datetime = now + N minutes)
  2. Instance waits
  3. workflow_engine cron tick ? wfe_ProcessTimerEvents() marks due events as Fired
  4. Next engine tick ? instance detects Fired status and advances (via escalation path if set)

No new cron job - timer firing is integrated into the existing workflow_engine job (runs every minute).

Use cases: follow-up reminders after a step, automatic escalation if no action is taken within a time limit, cooling-off periods between steps.

Schema: WorkflowInstanceEvent table with strWIE_Status (Pending / Fired), dteWIE_Trigger_DateTime, and dteWIE_Fired_DateTime.