Skip to content

v2026.08

Latest

Choose a tag to compare

@andy-cshub andy-cshub released this 19 Aug 14:14
· 23 commits to master since this release
c1ac337

🚀 What's Changed

Across the platform

  • Removed Adaptive training mode; removed the "linear" terminology as the only mode is now linear
  • Added a clear button to all relevant inputs, with unified behaviour throughout
  • Capped titles and names at 256 characters, and token prefixes at 32
  • Long text truncated in tables and cards reveals itself on hover, and only when actually clipped
  • Multi-line fields grow to fit their content instead of being dragged to resize
  • Unsaved changes state now persists on save failures
  • Removed all D3-based visualizations and replaced them with ECharts visualizations

New charts

  • All charts poll live data and offer CSV export
  • Progress - per-trainee progress across levels over time
    • Added a duration mode aligning every run to zero and showing elapsed time only
    • Added an event type filter
  • Status tiles - run state, time remaining, hints used and score
  • Feedback overview - one trainee's identity and how their run concluded
  • Live event feed - aggregated feed of most recent events
  • Scoreboard - trainees ranked by score and duration
  • Players per level - number of active runs at each level
  • Score attainment - distribution of trainees across score bands
  • Level difficulty - per-level difficulty from wrong answers, hints, solutions and time
  • Top wrong answers - most frequent incorrect answers per level
  • Trainee wrong answers - one trainee's incorrect answers
  • Time vs expected - time spent per level against the authored estimate
  • Time vs score - time spent against points scored per level
  • Cumulative score - score accumulating level by level
  • Overall speed vs score - every run's total time against its score
  • Level percentiles - a run's score and time ranked against others, per level
  • Assists coverage - which hints and solutions a run opened
  • Event timeline - chronological run events with commands plotted beneath
  • Commands - console commands aggregated per level, searchable, with argument folding
  • Command log - one run's commands in order, with host, source IP and working directory

Training analysis dashboard

  • Replaced all instance organiser visualizations with a dedicated analysis dashboard
    • Aggregated view
      • Presents the instance as a whole, covering current trainee standing and providing basis for improving the training definition
      • Contains status tiles, progress, live event feed, scoreboard, players per level, score attainment, level difficulty, top wrong answers, time vs expected and commands
    • Trainee view
      • Presents a single selected run end to end, for monitoring or debriefing an individual trainee
      • Contains cumulative score, time vs score, trainee wrong answers, event timeline and command log
      • Runs are picked from a list carrying score, time, current level, hints, solutions and wrong answers
    • Assessment view
      • Presents the distribution of answers per question, allowing for question quality and difficulty analysis
      • Selecting an answer highlights every trainee who chose it
      • CSV export of the shown assessment, one row per trainee and question
  • Selected view and trainee are held in the URL fragment, for sharing and bookmarking
  • Removed now deprecated views: dashboard, quiz results, walkthrough, command timeline and command analysis

Trainee run summary

  • Replaced the previous trainee run visualization with a new summary dashboard
    • Presents a completed run back to the trainee, covering how it concluded and how it stands against other runs on the instance
    • Contains feedback overview, overall speed vs score, level percentiles, scoreboard, assists coverage, cumulative score, time vs score and event timeline

Score export

  • Reworked training instance score export, now broken down per level and splitting the assessment score from the training score
  • Exports as CSV, replacing the previous plain text download
  • Exports rank, login, name, mail, state, start and end time, duration, one column per scored level, training score, assessment score, total, hints taken, wrong answers and solutions displayed
  • Levels a trainee never attempted export as a dash rather than a zero

Training definition editor

  • Improved EMI question edit visuals
  • Leaving Test mode restores each question's original required setting, instead of leaving every question forced to required

Topology

  • Fixed crashes on multihomed VM nodes, which were emitted once per attached network and collided on duplicate identifiers
  • Nodes whose operating system is not recognised no longer show a mismatched OS icon
  • Internet node graphic is generated asynchronously, and failures are handled rather than breaking the graph

Sandbox

  • Pool comments apply immediately and roll back if saving fails
  • Pool comment length is capped
  • Prompts before leaving pool edit with unsaved changes
  • Creating a sandbox definition shows a loading state, and repeated Enter presses can no longer submit it twice

User and group

  • Reworked microservice roles around a fixed default role, which every user of that microservice receives, cannot be deleted, and is always present so a microservice can never be left without one
  • Adding a role moves focus straight into it
  • Groups with no members or no roles say so, rather than showing an empty table
  • Minor visual and behavioural improvements across user, group and microservice management, covering unsaved changes prompts and support for users without an email address

Navigation and home

  • Home page hides agenda sections the user holds no role for, and shows a message if no agendas are accessible
  • Users with access to a single agenda are taken directly to it instead of through the home page
  • Fixed Design navigation offering Pool and Sandbox Images based on the wrong roles
  • Navigating to an entity that does not exist redirects instead of failing

Internal

  • New event query engine backing every chart, with events syncing into a local SQLite database in a web worker so charts query it instead of the network
  • Sync tracks a watermark per instance and event type, so only new events are fetched
  • Entity references on event rows resolve to full entities through a dedicated resolver
  • Only one browser tab may own the local cache; other tabs are shown a blocked page and resume once it is freed
  • Cached instances are evicted by age and total size on startup
  • Cached batch fetch of entities by identifier resolves each id from a local cache and requests only the ones missing
  • Cache lifetimes and maximum size are configurable, and polling periods are configured as duration strings
  • Charts stop polling while the browser tab is hidden, and resume when it returns
  • Route resolvers rewritten to fetch an entity once per navigation and share it across title and breadcrumb
  • Unsaved changes tracking and its route guard extracted for reuse across agendas
  • Pagination types moved from the Sentinel package into the shared utils library
  • Replaced moment with date-fns for all duration handling
  • Shared Vitest configuration adopted across every module, with a new test utilities library
  • Theme gains spacing, font size and font weight token scales, and a card header style

🙌 Thanks to all contributors in this release:

Full Changelog: v2.5.3...v3.1.0